了解一个csproj程序集引用

我正在使用VS2010,我试图通过文件引用从本地硬盘添加一些程序集到我的C#项目。 csproj文件,我发现有时文件引用显示为

 <Reference Include="name"> 

不过有时候看起来像

 <Reference Include="name, Version=xxx, Culture=neutral, processorArchitecture=MSIL"> 

什么可能导致差异?


受k3b的回答启发,我做了另一个testing。 我创build了一个新的类库项目。

  1. 添加文件参考。 “ 特性”窗格中的“ 特定版本 ”的初始值为Falsecsproj文件看起来像

     <Reference Include="Name"> <HintPath>...</HintPath> </Reference> 
  2. 属性窗格中的特定版本更改为True 。 VS在Include属性中添加版本。

     <Reference Include="Name, Version=..."> <HintPath>...</HintPath> </Reference> 
  3. 属性窗格中的特定版本更改为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>