升级至.NET 4.7.1后添加.NET Standard 2类库出现异常引用及警告
这问题我之前帮好几个开发者排查过——.NET 4.7.1确实是官方宣称完全支持.NET Standard 2.0的框架版本,但VS和NuGet偶尔会抽风,把本该是单个.NET Standard元引用的依赖拆成一堆零散的System.xxx引用,还搞出文件缺失警告。给你几个按优先级排序的修复步骤:
先确认项目配置的准确性
右键项目→属性→应用程序,确保目标框架确实是.NET Framework 4.7.1,不要误选成4.7或者更低版本(那些版本对.NET Standard 2.0的支持不完整)。如果之前是升级上来的,建议手动编辑.csproj文件,检查是否有多余的<Reference>节点指向零散的System组件,直接删掉这些节点,只保留对目标.NET Standard类库的引用。清理NuGet缓存,重置依赖解析
打开VS的开发者命令提示符,执行命令:dotnet nuget locals all --clear,或者在VS内通过「工具→NuGet包管理器→管理解决方案的NuGet包→设置→清除所有缓存」操作。缓存里的旧依赖数据经常会导致解析异常。移除多余的System. NuGet包*
进入「管理NuGet包」界面,检查你的项目是否安装了任何System开头的独立包(比如System.Collections、System.Linq之类)。.NET 4.7.1本身已经内置了这些组件的兼容版本,额外安装反而会导致引用冲突和文件缺失警告,直接卸载这些多余的包即可。修复绑定重定向
右键项目→属性→应用程序→点击「生成绑定重定向」按钮,让VS自动生成正确的程序集绑定配置。有时候缺失绑定重定向会导致VS找不到对应的底层文件,进而抛出警告。重置VS项目状态
关闭VS,删除项目根目录下的.vs文件夹、bin和obj文件夹,然后重新打开项目并重新生成。这一步能解决很多VS项目系统的缓存异常问题。
如果以上步骤都没用,建议升级到VS2019及以上版本——早期的VS2017版本对.NET Standard 2.0的引用解析存在已知bug,升级IDE往往能直接解决问题。
内容的提问来源于stack exchange,提问作者Quango

