mel*_*ers 10 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>
Run Code Online (Sandbox Code Playgroud)
如果我们在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>
Run Code Online (Sandbox Code Playgroud)
请注意,其中一个使用PublicKeyToken属性添加引用,另一个使用processorArchitecture属性添加它.
这会导致我们的源代码控制出现频繁(和不必要)更新和合并的问题.
很高兴知道为什么会发生这种情况,但我宁愿有办法防止它发生.有什么建议?
Bob*_*ger -4
我做了一些研究。并决定发布答案。
PublicKeyToken = null为您提供有关 CLR 正在查找未签名程序集的信息。
程序集构成了基于 .NET 的应用程序的部署、版本控制、重用、激活范围和安全权限的基本单元。程序集采用可执行 (.exe) 文件或(在本例中) 动态链接库 (.dll) 文件的形式 ,并且是 .NET Framework 的构建块。
公钥令牌是一个小数字,是代表公钥的方便“令牌”。公钥相当长;公钥令牌的目的是让您在不说出整个密钥的情况下引用密钥。就像《指环王》这五个词代表了一部五十万字的小说。如果每次想讲都得说出那五十万字的话,那就很不方便了。
当我们知道程序集和公钥令牌的定义时,我们就可以谈论它们。
当您添加对项目的引用时,它们看起来会有所不同。
添加文件引用。属性面板中Specific Version的初始值为False。csproj 文件看起来像
<Reference Include="Name">
<HintPath>...</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
将“属性”窗格中的“特定版本”更改为“True”。VS 在 Include 属性中添加版本。
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
再次将属性窗格中的特定版本更改为 False。VS 添加一个子元素 SpecificVersion。
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
Run Code Online (Sandbox Code Playgroud)
所以最终的定义似乎是:
您获得哪种引用类型取决于您链接程序集的方式。
您的问题来自不兼容的程序集。不是从你引用它们的方式来看的。