小编Roe*_*ngs的帖子

DPI意识 - 在一个版本中不知道,在另一个版本中意识到系统

所以我们有这个奇怪的问题.我们的应用程序是一个C#/ WinForms应用程序.在我们的6.0版本中,我们的应用程序不支持DPI.在我们的6.1版本中,它突然变成了DPI意识.
在6.0版本中,如果您在高DPI中运行它,它使用Windows位图缩放,这很好,因为这不会影响屏幕布局.在6.1版本中,由于它因某种原因而成为DPI识别,因此用户界面受到严重破坏.
我们现在无法解决这个问题.我们有数百个屏幕,因此在DPI识别模式下使它们全部正常工作将花费大量时间.

我们已使用SysInternals Process Explorer确认了这一点.在我们的6.0版本中,它显示了Unaware,但在我们的6.1版本中,它最初显示Unaware,但随后更改为System Aware.
后者发生在代码从EXE进入包含所有用户界面代码的程序集DLL中时(我们的EXE基本上是一个非常薄的shell;它实际上只是在我们的表示层程序集上调用一个Controller类.)

我们已确认以下内容:

  • 两个版本都使用VSS 2017在发布模式下构建.
  • 两个版本都针对相同的.NET Framework(4.5)
  • 两个版本都使用相同的DevExpress版本.
  • 两个版本都具有相同的应用程序清单,该清单启用DPI感知设置.
  • 这两个版本都没有任何与DPI相关的Windows API的调用.
  • 使用Sys Internals和一些消息框,我们确定了6.1版本在什么时候发现(进入Presentation程序集的入口点)以及那时加载了什么DLL(我们的,DevExpress,其他依赖项),然后我们构建了一个小的虚拟应用程序,引用相同的DLL,并确认它们已加载.该虚拟应用程序不会成为DPI意识.
  • 我们比较了两个版本之间的主要csproj文件,没有任何有意义的差异.
    • 这两个版本都没有引用WPF的任何内容.

我们不明白为什么我们的6.1版本突然变成了DPI意识.我们无知还有什么可以看,我们需要一个修复程序,将此版本恢复到DPI unaware模式.它正在阻止我们的发布.非常感谢任何指针.我们愿意在这一点上尝试任何事情.

.net c# highdpi winforms dpi-aware

10
推荐指数
1
解决办法
1829
查看次数

标签 统计

.net ×1

c# ×1

dpi-aware ×1

highdpi ×1

winforms ×1