了解一个csproj程序集引用
我正在使用VS2010,我试图通过文件引用从本地硬盘添加一些程序集到我的C#项目。 csproj
文件,我发现有时文件引用显示为
<Reference Include="name">
不过有时候看起来像
<Reference Include="name, Version=xxx, Culture=neutral, processorArchitecture=MSIL">
什么可能导致差异?
受k3b的回答启发,我做了另一个testing。 我创build了一个新的类库项目。
-
添加文件参考。 “ 特性”窗格中的“ 特定版本 ”的初始值为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>
所以看来这个规则是:
- 当包含属性中存在版本并且没有
SpecificVersion
子元素时,文件程序集configuration为特定版本 -
SpecificVersion
子元素只附加值False 。
有一件事我还是不明白:
- 对于我的新testing项目,如果删除文件引用并将其重新添加回去,则会返回到缺省值为1的格式。
- 对于我现有的项目,如果我删除了文件引用并将其重新添加回来,我将回到第3点的格式。虽然这也意味着不使用特定版本,但我想知道为什么它不回到格式的第1点。
你得到的引用types取决于你如何链接程序集。
- 在项目浏览器中select引用的程序集
- 去属性页面
你会发现一个布尔标志“特定的版本”
- true表示:程序集必须具有version = xxx
- 错误的意思是:忽略程序集版本
(我只有德文vs2010,所以德文“Spezifische Version”的英文翻译可能略有不同)
[更新]
我试过以下使用vcs2010-express德语
添加引用与默认SpecificVersion = False :没有版本
<Reference Include="Castle.Core"> <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath> </Reference>
修改的引用: SpecificVersion = True :添加版本
<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath> </Reference>
再次修改引用: SpecificVersion = False :版本保持不变,新元素SpecificVersion
<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference>
似乎特定的版本被记住,但由于<SpecificVersion>False</SpecificVersion>