首页 > 解决方案 > Visual Studio 2017 无法正确解析特定引用

问题描述

我的解决方案中有几个System.ValueTuple.dll通过 nuget 引用的项目。对于所有这些项目,程序集的路径定义为相同,但 Visual Studio 2017 以不同方式解决它。这导致它一遍又一遍地构建大部分项目,尽管没有任何变化。

下面是如何在项目文件中定义引用的示例(同样,所有项目都相同):

<Reference Include="System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
  <HintPath>..\..\..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll</HintPath>
  <Private>True</Private>
</Reference>

这是我得到的消息,当 Visual Studio 错误地解析项目的引用并因此再次构建它时,无论是否有更改:

项目“XXX”不是最新的。CopyLocal 参考源 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.ValueTuple.dll' 比 'C: \Src\Current.Release\Bin\Debug\System.ValueTuple.dll'。

为什么 Visual Studio 不采用我定义的引用或只是失败,如果它不存在?它还在引用属性窗口中显示错误的路径。

我可以在多台机器上重现这种行为。如果我签出一个有问题的项目文件,添加一个空行并重新加载它,它会正确解析引用。但我的意思是,我并没有真正做出改变。如果我重新映射工作区,问题就会回来。

希望你们能帮助我。提前致谢!

标签: c#.netvisual-studiomsbuildvisual-studio-2017

解决方案


Visual Studio 2017 无法正确解析特定引用

这是因为:

这是由于对 NETStandard 2.0 的注入支持。我们将新程序集注入 NET 4.6.1 及更高版本的桌面项目,以增加对 netstandard2.0 的支持。我们现在在目标而不是包中执行此操作,因为它不再需要引用包来构建网络标准库。每当我们看到引用了 netstandard1.5 或更高版本的库时,就会发生这种注入(参见 dotnet/sdk#1386)。

要解决此问题,您可以将绑定重定向添加到这些引用。

检查从 MSBuild 工具复制/加载的 System.Net.Http v4.2.0.0 以了解更多详细信息。

希望这可以帮助。


推荐阅读