.NET 6.0迁移后运行报标准库相关FileNotFoundException如何解决
.NET 4.X 迁移 .NET 6.0 System.Drawing.Common 加载异常解决方案
1. 补充Windows专属运行时配置
.NET 6 中 System.Drawing.Common 为Windows专属组件,默认不会被非Windows桌面项目加载,需要在项目.csproj文件的<PropertyGroup>节点下添加对应配置:
<!-- WinForms项目添加该项 --> <UseWindowsForms>true</UseWindowsForms> <!-- WPF项目添加该项 --> <UseWPF>true</UseWPF> <!-- 显式声明仅支持Windows平台 --> <SupportedOSPlatform>windows</SupportedOSPlatform>
若项目需要跨平台运行,
System.Drawing.Common从.NET 7开始已正式标记为Windows-only,建议替换为ImageSharp、SkiaSharp等跨平台绘图类库。
2. 核对NuGet包版本一致性
- 确认安装的
System.Drawing.Common、Microsoft.Win32.SystemEvents包大版本和项目目标框架匹配,.NET 6 项目请使用6.0.x版本的包,不要安装7.0/8.0等更高版本,避免版本绑定不匹配。 - 检查项目依赖的其他第三方类库是否引用了不同版本的上述两个包,避免依赖冲突。
3. 清理缓存后重新生成
- 关闭Visual Studio,删除项目根目录下的
.vs隐藏文件夹,以及所有项目的bin、obj文件夹 - 重新打开解决方案,右键点击解决方案选择「恢复NuGet包」
- 完整重新生成解决方案后再运行测试
4. 配置程序集绑定重定向
如果项目存在多版本依赖冲突,可在App.config文件的<runtime>节点下添加绑定重定向规则:
<dependentAssembly> <assemblyIdentity name="System.Drawing.Common" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Win32.SystemEvents" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly>
内容的提问来源于stack exchange,提问作者Haighstrom
相关产品推荐
相关产品推荐

