无法从WindowsBase, Version=4.0.0.0程序集加载PROCESS_DPI_AWARENESS类型的问题解决求助
这问题我之前在项目里也碰到过类似的,给你几个实用的排查和解决方向:
检查目标设备的.NET Framework版本
PROCESS_DPI_AWARENESS这个类型是在.NET Framework 4.6.2及以上版本才引入的。虽然你的代码没有直接调用它,但VisualTreeHelper.GetDpi()内部实现依赖了这个类型。如果那台客户端设备安装的.NET版本低于4.6.2,就会抛出这个加载异常。建议先确认设备的.NET版本,升级到4.6.2或更高版本试试。确认项目的目标框架与运行时配置
即使你本地开发环境用的是高版本.NET,若项目的目标框架设置为4.0、4.5这类低版本,编译后的程序在低版本环境运行就会出问题。请确保项目目标框架至少是.NET Framework 4.6.2,同时在app.config中添加以下运行时配置,启用WPF的高DPI支持:<runtime> <AppContextSwitchOverrides value="Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" /> </runtime>这个开关能避免WPF因兼容性限制而无法加载高DPI相关的内部类型。
调整清单文件的DPI感知配置
你当前用的PerMonitorV2对Windows版本有要求(需要Windows 10 1703及以上),如果目标设备系统版本较低,可能触发内部兼容性问题。可以尝试修改清单的dpiAwareness配置为兼容模式:<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>或者先暂时改为
PerMonitor测试,看是否还会抛出异常,再逐步调整到最优配置。清理编译缓存并重新部署
有时候本地编译的缓存文件、或者引用的WindowsBase程序集版本不一致,会导致部署到设备上的程序依赖出错。建议清理项目的bin和obj文件夹,重新生成解决方案,再将最新的编译产物部署到目标设备上。检查目标设备的Windows系统版本
PerMonitorV2模式要求Windows 10 1703(Creators Update)或更高版本。如果那台设备的Windows版本低于这个,不仅DPI感知可能无法正常工作,还可能引发内部类型加载异常。可以通过winver命令查看系统版本,必要时升级系统到兼容版本。
内容的提问来源于stack exchange,提问作者Ashot

