c# - 为什么 C# 引用在 NuGet 和 Visual Studio 之间添加不同

标签 c# reference nuget

我们以两种不同的方式使用 NuGet(NuGet 版本:3.5.0.1996)。我们可以从命令行运行它,也可以使用 Visual Studio (2015) 中的 NuGet 包管理器。

问题是这两种方式添加对不同格式的.csproj文件的引用。如果我们使用命令行,我们会得到一个如下所示的引用:

<Reference Include="Dummy, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
  <HintPath>..\packages\Dummy.1.27.10\lib\net452\Dummy.dll</HintPath>
  <Private>True</Private>
</Reference>

如果我们在 Visual Studio 中使用 NuGet 包管理器,我们会得到一个如下所示的引用:

<Reference Include="Dummy, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\Dummy.1.27.10\lib\net452\Dummy.dll</HintPath>
  <Private>True</Private>
</Reference>

请注意,一个添加了带有 PublicKeyToken 属性的引用,另一个添加了带有 processorArchitecture 属性的引用。

这会导致我们的源代码管理出现问题,导致频繁(且不必要)的更新和合并。

很高兴知道为什么会发生这种情况,但我更希望有一种方法可以防止这种情况发生。有什么建议吗?

最佳答案

从 Visual Studio 2015 开始,Nuget 是嵌入式的,您无法更改所使用的版本。我手边没有要检查的 VS 2015,但很可能它使用的版本与您在命令行中使用的版本不同。

Nuget“遭受”(或享受)了很多变化,我认为这只是两个不同版本的 nuget 如何处理包引用的体现。

为了避免源代码管理出现问题,我的建议是标准化一种使用 Nuget 的方法并坚持使用。我的建议是通过包管理器控制台(类似于 CLI)或通过可视化界面在 Visual Studio 中使用它。

关于c# - 为什么 C# 引用在 NuGet 和 Visual Studio 之间添加不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45088790/

相关文章:

c# - uint 的二进制表示是什么样的?

c# - 想直接从对象访问类属性(字段)

C头文件和源文件混淆

c++ - pthread 看不到作为参数传递的实例变量

Jenkins CI 正在跳过 nuget.exe 上的包恢复 my.sln

c# - 为什么空合并运算符 (??) 在这种情况下不起作用?

c# - Xamarin 安卓 C# : Using the xml resource folder and manifest to define an intent filter for detecting connected usb devices crashs application

c# - Microsoft.SqlServer.Types.dll——为什么/如何在我的解决方案中引用它?

windows - 通用 Windows 平台/UAP : what is AOT?

nuget - 无法在 VSTS 上打包 Nuget 包无法将类型 'System.String' 的对象转换为类型 'NuGet.Frameworks.NuGetFramework'