66

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

<Reference Include="name">

但是有时它显示为

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

什么可能导致差异?


受 k3b 回答的启发,我又做了一次测试。我创建了一个新的类库项目。

  1. 添加文件引用。属性窗格中特定版本的初始值为False。该文件看起来像csproj

    <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
  • SpecificVersion元素仅附加值False

我仍然不明白的一件事:

  • 对于我的新测试项目,如果我删除文件引用并重新添加它,它会回到第 1 点中的格式,这是默认设置。
  • 对于我现有的项目,如果我删除文件引用并重新添加它,我会在第 3 点恢复格式。虽然这也意味着未使用特定版本,但我想知道为什么它不会回到第 1 点的格式.
4

1 回答 1

30

您获得哪种引用类型取决于您如何链接程序集。

  • 在项目浏览器中选择引用的程序集
  • 转到属性页面

在那里你找到一个布尔标志“特定版本”

  • true 表示:程序集必须有 version=xxx
  • false 表示:忽略汇编版本

(我只有一个德语-vs2010,所以德语“Spezifische 版本”的英文翻译可能略有不同)

[更新]

我使用 vcs2010-express German 尝试了以下操作

添加默认 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>

于 2013-05-16T06:56:40.130 回答