了解 csproj 程序集参考 [英] Understanding a csproj assembly reference
问题描述
我正在使用 VS2010,我尝试通过文件引用将一些程序集从本地硬盘添加到我的 C# 项目中.查看 csproj
文件,我发现有时文件引用显示为
I am using VS2010 and I tried to add a few assemblies from local hard disk to my C# project through file reference. Peeking into the csproj
file, I found sometimes the file reference appears as
<Reference Include="name">
但有时它显示为
<Reference Include="name, Version=xxx, Culture=neutral,
processorArchitecture=MSIL">
是什么导致了差异?
受到 k3b 回答的启发,我又做了一个测试.我创建了一个新的类库项目.
Inspired by k3b's answer, I did another test. I created a new class library project.
添加文件引用.Properties 窗格中 Specific Version 的初始值为 False.
csproj
文件看起来像
Add a file reference. The initial value of Specific Version in Properties pane is False. The
csproj
file look like
<Reference Include="Name">
<HintPath>...</HintPath>
</Reference>
将属性窗格中的特定版本更改为True.VS 在 Include
属性中添加版本.
Change Specific Version in Properties pane to True. VS adds version in the Include
attribute.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
</Reference>
再次将属性窗格中的特定版本更改为False.VS 添加子元素 SpecificVersion
.
Change Specific Version in Properties pane to False again. VS adds a child element SpecificVersion
.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
所以看起来规则是:
- 当 Version 存在于 Include 属性中并且没有
SpecificVersion
子元素时,文件程序集被配置为特定版本莉> SpecificVersion
子元素仅附加值 False.
- When Version is present in Include attribute and there is no
SpecificVersion
child element, the file assembly is configured to be Specific Version - The
SpecificVersion
child element is only appended with value False.
有一件事我还是不明白:
One thing I still do not understand:
- 对于我的新测试项目,如果我删除文件引用并重新添加它,它会返回到点 1 中的格式,这是默认设置.
- 对于我现有的项目,如果我删除文件引用并重新添加它,我会在第 3 点恢复格式.虽然这也意味着未使用特定版本,但我想知道为什么它不恢复格式在第 1 点.
推荐答案
您获得哪种引用类型取决于您如何链接程序集.
Which reference-type you get depends on how you link the assembly.
- 在项目资源管理器中选择引用的程序集
- 转到属性页面
在那里你找到一个布尔标志特定版本"
there you find a boolean flag "specific Version"
- true 表示:程序集必须具有 version=xxx
- false 表示:忽略程序集版本
(我只有一个 German-vs2010,所以德语Spezifische 版本"的英文翻译可能略有不同)
(I only have a german-vs2010 so the english translation for the german "Spezifische Version" may be slightly different)
[更新]
我使用 vcs2010-express German 尝试了以下操作
I tried the following using vcs2010-express german
使用默认SpecificVersion=False添加引用:无版本
<Reference Include="Castle.Core">
<HintPath>......libfluentNHibernateCastle.Core.dll</HintPath>
</Reference>
修改参考:SpecificVersion=True:添加版本
<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<HintPath>......libfluentNHibernateCastle.Core.dll</HintPath>
</Reference>
再次修改引用:SpecificVersion=False:版本保持不变,新元素SpecificVersion
modified reference again: SpecificVersion=False : version remains and new element SpecificVersion
<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<HintPath>......libfluentNHibernateCastle.Core.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
似乎记住了特定版本但忽略了因为
It seems that the specific version is remembered but ignorede because of <SpecificVersion>False</SpecificVersion>
这篇关于了解 csproj 程序集参考的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!