Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在Visual Studio 2017中找不到引用的组件,而在Visual Studio 2015中找到了它_C#_Visual Studio 2017 - Fatal编程技术网

C# 为什么在Visual Studio 2017中找不到引用的组件,而在Visual Studio 2015中找到了它

C# 为什么在Visual Studio 2017中找不到引用的组件,而在Visual Studio 2015中找到了它,c#,visual-studio-2017,C#,Visual Studio 2017,我有一个包含两个项目的解决方案——一个主项目和一个单元测试项目。在Visual Studio 2015中打开时,找到所有引用并成功生成项目。在Visual Studio 2017中打开时,找不到几个但不是所有的NuGet包引用,编译失败。一些失败的引用是 System.Data.Common System.Net.Http System.Net.Http.WebRequest 系统、安全、加密、算法 系统。安全。加密。编码 System.Security.Cryptography.Primit

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

  • System.Data.Common
  • System.Net.Http
  • System.Net.Http.WebRequest
  • 系统、安全、加密、算法
  • 系统。安全。加密。编码
  • System.Security.Cryptography.Primitives
  • System.Security.Cryptography.X509证书

。。。但找到其他NuGet引用并没有问题。此解决方案是使用VS2015创建的。查看.csproj文件时,不会跳出任何异常

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

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

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

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


另外,在VS 2015中打开解决方案,并仔细检查文件路径中有问题的引用。确保DLL不是从Visual Studio 2015独有的文件路径引用的。

好的,回答我自己的问题

我找到了我相信的答案。此特定项目最初是在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 assembly 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程序集中

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


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

在编译之前,您是否运行了
nuget restore
?它应该作为构建过程的一部分来完成,也许你的.sln或csproj文件中有什么奇怪的地方。@RonBeyer-我执行了更新包-重新安装,但没有尝试nuget restore。我认为重新安装就足够了,但可能还不够……仅供参考-不知道是否与此有关-我试图手动添加对一个简单的4.7.1控制台应用程序的引用,出于某种原因,他更改了以下
C:\程序文件(x86)的路径\参考Assemblies\Microsoft\Framework\.NETFramework\v4.7.1\Facades\System.Data.Common.dll
虽然我从Nuget Packages文件夹中选择了该文件,但对我来说,似乎4.7.1只是不想要Nugetpackage@RandRandom-看起来System.Data.Common命名空间现在位于System.Data.dll中,不需要这个NuGet包。我添加了这个问题的答案和这个特定的信息…两个有效点。我已经验证了packages.config文件的准确性。事实上,为了解决这个问题,我多次删除并重新添加了NuGet包。我的道路是相对的。下面是System.Data.Common的.csproj文件中的条目示例(请参阅下一条注释)…\packages\System.Data.Common.4.3.0\lib\net451\System.Data.Common.dll True