了解csproj程序集引用

int*_*e02 63 c# reference csproj visual-studio-2010 .net-assembly

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

<Reference Include="name">
Run Code Online (Sandbox Code Playgroud)

但有时它看起来像

<Reference Include="name, Version=xxx, Culture=neutral, 
                                          processorArchitecture=MSIL">
Run Code Online (Sandbox Code Playgroud)

什么可能导致差异?


受到k3b答案的启发,我做了另一个测试.我创建了一个新的类库项目.

  1. 添加文件引用.的初始值特定版本属性面板是.该csproj文件看起来像

    <Reference Include="Name">
      <HintPath>...</HintPath>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改特定版本属性窗格.VS在Include属性中添加版本.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更改特定版本属性窗格中一次.VS添加了一个子元素SpecificVersion.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)

所以似乎规则是:

  • 版本存在于包括属性,并且没有SpecificVersion子元素,该文件组件被配置为特定版本
  • SpecificVersion子元素只与价值附加.

有一点我还是不明白:

  • 对于我的新测试项目,如果我删除文件引用并再次添加它,它将返回到第1点的格式,这是默认值.
  • 对于我现有的项目,如果我删除文件引用并再次添加它,我会在第3点找回格式.虽然这也意味着没有使用特定版本,但我想知道为什么它不会回到第1点的格式.

k3b*_*k3b 29

您获得的参考类型取决于您如何链接程序集.

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

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

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

(我只有德语vs2010所以德语"Spezifische版本"的英文翻译可能略有不同)

[更新]

我尝试使用vcs2010-express german进行以下操作

添加默认的引用SpecificVersion = False:没有版本

<Reference Include="Castle.Core">
  <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

修改后的参考: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>
Run Code Online (Sandbox Code Playgroud)

再次修改引用: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>
Run Code Online (Sandbox Code Playgroud)

似乎特定的版本被记住但是因为而忽略了 <SpecificVersion>False</SpecificVersion>

  • 我确认你的意见.相应地更新了答案. (2认同)