我有一个包含两个项目的解决方案 - 主要项目和单元测试项目 . 在Visual Studio 2015中打开时,会找到所有引用并成功构建项目 . 在Visual Studio 2017中打开时,找不到几个但并非所有NuGet包引用,并且编译失败 . 一些失败的参考文献是......
-
System.Data.Common
-
System.Net.Http
-
System.Net.Http.WebRequest
-
System.Security.Cryptography.Algorithms
-
System.Security.Cryptography.Encoding
-
System.Security.Cryptography.Primitives
-
System.Security.Cryptography.X509Certificates
...但是其他NuGet引用没有问题 . 该解决方案是使用VS2015创建的 . 查看.csproj文件时,没有任何异常跳出来 .
我正在考虑在VS2017中从头开始重建它以尝试识别问题 .
是否有其他人遇到过这个问题,并且/或者有任何关于为什么会发生这种情况的建议以及应该做些什么来促进修复?
Update: 我创建了一个引用.NET 4.7.1的全新VS2017 WebApi项目,并成功编译 . 然后我添加了NuGet包System.Data.Common 4.3.0 . NuGet安装过程似乎已完成,没有任何错误,但我仍然留下无效的引用 . 这很容易复制 .
2 回答
好的,回答我自己的问题 .
我找到了我认为的答案 . 此特定项目最初是使用.NET 4.6.2在VS2015中开发的 . 当更改为VS2017时,我们选择将.NET升级到4.7.1 . 问题在于.NET版本,而不是VS版本 .
较新版本的.NET将许多这些NuGet程序集添加到标准库中 . NuGet包与本机.NET 4.7.1命名空间冲突 . 例如,在.NET 4.7.1中,可在程序集System.Data.dll中找到命名空间System.Data.Common . 不再需要添加NuGet程序集System.Data.Common.dll . 事实上,如果我添加System.Data.Common NuGet包程序集,我现在有两个具有命名空间System.Data.Common的程序集 - 一个在System.Data.dll中,另一个在System.Data.Common.dll中 - 因此参考问题 .
解决方案是使用.NET 4.7.1版本并删除额外的NuGet程序集 . 对于System.Security冲突也是如此 . 与System.Net.Http的冲突实际上被移动到名为Microsoft.AspNet.WebApi.Client的NuGet程序集中 .
我希望所有这些都能帮助别人...(呃......)....
BTW - 看起来在使用VS2015和.NET 4.7.1时,这些冲突会被抑制并且永远不会显示 . 这感觉就像VS2015的缺点 . 很高兴VS2017向他们展示了真正的问题......
检查
packages.config
文件以确保Nuget包实际列为项目的依赖项 .此外,在VS 2015中打开解决方案并仔细检查相关引用的文件路径 . 确保未从Visual Studio 2015特有的文件路径引用DLL .