【问题标题】:Why is Referenced Component not be found in Visual Studio 2017 when it is found in Visual Studio 2015为什么在 Visual Studio 2015 中找到引用的组件时在 Visual Studio 2017 中找不到
【发布时间】:2021-12-23 23:30:16
【问题描述】:

我有一个包含两个项目的解决方案 - 一个主要项目和一个单元测试项目。在 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 中从头开始重建它以尝试找出问题。

有没有其他人遇到过这个问题,和/或有任何人对为什么会发生这种情况以及应该做些什么来促进修复有任何建议?

更新: 我创建了一个引用 .NET 4.7.1 的全新 VS2017 WebApi 项目,并成功编译。然后我添加了 NuGet 包 System.Data.Common 4.3.0。 NuGet 安装过程似乎已完成,没有任何错误,但我仍然得到一个无效的引用。这很容易复制。

【问题讨论】:

  • 你在编译之前有没有运行nuget restore?它应该作为构建过程的一部分来执行,可能在您的 .sln 或 csproj 文件中有些奇怪。
  • @RonBeyer - 我执行了 Update-Package -reinstall,但没有尝试 nuget restore。我认为重新安装就足够了,但也许不是......
  • 仅供参考 - 不知道它是否与它有关 - 我尝试手动添加对简单 4.7.1 控制台应用程序的引用,由于某种原因,他将路径更改为以下 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.1\Facades\System.Data.Common.dll虽然我从 Nuget Packages 文件夹中选择了文件 - 对我来说似乎 4.7.1 只是不想要 nuget 包
  • @RandRandom - 看起来 System.Data.Common 命名空间现在可以在 System.Data.dll 中找到,并且不需要此 NuGet 包。我用这个特定的信息添加了这个问题的答案......
  • 这解决了我的问题:删除 bin/obj 文件夹并构建。不知道为什么,但参考文献的所有警告都消失了。

标签: c# visual-studio-2017


【解决方案1】:

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

我找到了我相信的答案。这个特定项目最初是在 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.Security 冲突也是如此。与 System.Net.Http 的冲突实际上被移到了一个名为 Microsoft.AspNet.WebApi.Client 的 NuGet 程序集中。

我希望所有这些都对其他人有所帮助...(uhhhgggg)....

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

【讨论】:

    【解决方案2】:

    检查您的 packages.config 文件以确保 Nuget 包实际上被列为您项目的依赖项。

    另外,在 VS 2015 中打开解决方案并仔细检查文件路径以查找相关引用。确保未从 Visual Studio 2015 独有的文件路径引用 DLL。

    【讨论】:

    • 两个有效点。我已经验证 packages.config 文件是准确的。事实上,我已经多次删除并重新添加了 NuGet 包,试图解决这个问题。我的路径是相对的。这是 System.Data.Common 的 .csproj 文件中的条目示例(请参阅下一条评论)
    • ..\packages\System.Data. Common.4.3.0\lib\net451\System.Data.Common.dllTrue
    【解决方案3】:

    我必须创建一个新项目并将所有必要的文件从旧项目转移到新项目来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      相关资源
      最近更新 更多