我们使用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属性添加它。
这会导致我们的源代码控制出现频繁(和不必要的)更新和合并的问题。
知道为什么会发生这种情况会很好,但我宁愿有办法防止它发生。有什么建议吗?
答案 0 :(得分:-1)
从 Visual Studio 2015 开始,Nuget 已嵌入,您无法更改使用的版本。我手头没有要检查的 VS 2015,但很可能它使用的版本与您在命令行中使用的版本不同。
Nuget 已经“遭受”(或享受)了很多变化,我认为这只是两个不同版本的 nuget 如何处理包引用的体现。
为了避免出现源代码控制问题,我的建议是标准化一种使用 Nuget 的方法并坚持下去。我的建议是在 Visual Studio 中使用它,通过包管理器控制台(类似于 CLI)或通过可视化界面。
答案 1 :(得分:-2)
我做了一点研究。并决定发布答案。
PublicKeyToken = null
为您提供有关CLR正在寻找未签名程序集的信息。
程序集构成了基于.NET的应用程序的部署,版本控制,重用,激活范围和安全权限的基本单元。程序集采用可执行(.exe)文件或(在本例中) 动态链接库(.dll)文件的形式,并且是.NET的构建块框架。
公钥令牌是一个很小的数字,这是一个方便的标记&#34;代表公钥。公钥很长;公钥令牌的目的是让你在不说出整个密钥的情况下引用密钥。按照同样的方式说出“指环王”#34;是五个词,代表一个五十万字的小说。如果你每次想谈论它都会很不方便,你必须陈述那些50万字。
当我们知道程序集和公钥标记的定义时,我们可以谈论它们。
当您添加对项目的引用时,它们看起来会有所不同。
添加文件参考。 “属性”面板中“特定版本”的初始值为False。 csproj文件看起来像
<Reference Include="Name">
<HintPath>...</HintPath>
</Reference>
在“属性”窗格中将特定版本更改为True。 VS在Include属性中添加了版本。
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
</Reference>
再次在“属性”窗格中将“特定版本”更改为“False”。 VS添加了一个子元素SpecificVersion。
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
所以最终的定义似乎是:
您获得的参考类型取决于您如何链接程序集。
您的问题来自不兼容的程序集。不是你引用它们的方式。