代码之家  ›  专栏  ›  技术社区  ›  barrypicker

为什么在Visual Studio 2015中找到引用的组件时在Visual Studio 2017中找不到它

  •  3
  • barrypicker  · 技术社区  · 6 年前

    我有两个项目的解决方案-一个主项目和一个单元测试项目。在Visual Studio 2015中打开时,会找到所有引用并成功生成项目。在visual studio 2017中打开时,找不到几个但不是所有的nuget包引用,并且编译失败。一些失败的引用是…

    • 系统.数据.通用
    • 系统.net.http
    • 系统.net.http.webrequest
    • 系统安全密码算法
    • 系统安全密码编码
    • system.security.cryptography.primitives系统
    • system.security.cryptography.x509证书

    References

    …但是其他的nuget引用没有问题。此解决方案是使用VS2015创建的。在查看.csproj文件时,没有任何异常情况会跳出。

    我正在考虑在VS2017中从头开始重建它,试图找出问题所在。

    是否有其他人遇到过此问题,和/或是否有人对发生此问题的原因以及应采取哪些措施来促进修复有任何建议?

    更新: 我参考.net 4.7.1创建了一个全新的vs2017 webapi项目,并成功编译。然后我添加了nuget包system.data.common 4.3.0。NuGet安装过程似乎已完成,没有错误,但仍有一个无效的引用留给我。这很容易复制。

    2 回复  |  直到 6 年前
        1
  •  2
  •   barrypicker    6 年前

    好吧,回答我自己的问题。

    我找到了我相信的答案。此特定项目最初是在VS2015中使用.NET 4.6.2开发的。当更改为VS2017时,我们选择将.NET升级到4.7.1。问题在于.NET版本,而不是VS版本。

    较新版本的.NET已将许多这些NuGet程序集添加到标准库中。Nuget包与本机.NET 4.7.1命名空间冲突。例如,在.NET 4.7.1中,命名空间System.Data.Common位于程序集System.Data.dll中。不再需要添加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.net.http的冲突实际上已移动到名为Microsoft.aspnet.webapi.client的nuget程序集中。

    我希望所有这些都能帮助其他人…(啊…)

    顺便说一句 -在将VS2015与.NET 4.7.1一起使用时,这些冲突似乎被抑制并且永远不会显示。这感觉像是VS2015的一个缺点。很高兴VS2017向他们展示了真正的问题……

        2
  •  0
  •   Babak Naffas    6 年前

    检查您的 packages.config 文件,以确保实际将NuGet包列为项目的依赖项。

    另外,在vs 2015中打开解决方案,并双击文件路径以查找相关引用。确保没有从Visual Studio 2015独有的文件路径引用dll。