c# - 了解 csproj 程序集引用

标签 c# visual-studio-2010 reference .net-assembly csproj

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

<Reference Include="name">

但有时它显示为

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

什么会导致差异?


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

  1. 添加文件引用。 Properties Pane 中Specific Version 的初始值为Falsecsproj 文件看起来像

    <Reference Include="Name">
      <HintPath>...</HintPath>
    </Reference>
    
  2. Properties Pane 中的 Specific Version 更改为 True。 VS 在 Include 属性中添加版本。

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
  3. 再次将Properties Pane 中的Specific Version 更改为False。 VS 添加子元素SpecificVersion

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    

所以看起来规则是:

  • Version 出现在 Include 属性中并且没有 SpecificVersion 子元素时,文件程序集被配置为特定版本<
  • SpecificVersion 子元素仅附加值 False

有一件事我还是不明白:

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

最佳答案

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

  • 在project-explorer中选择引用的程序集
  • 转到属性页

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

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

(我只有一个 german-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>,似乎记住了具体的版本但忽略了

关于c# - 了解 csproj 程序集引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578819/

相关文章:

c++ - 为什么Visual Studio生成的C++ "Hello World"项目看起来有点奇怪?

c++ - 为什么基本引用没有堆开销?

C++ 对象 : When should I use pointer or reference

java - 如何找出一个对象有多少引用?

c# - 通过 jQuery 从发布请求的部分 View 中检索数据

c#应用程序不会在除开发它的盒子之外的任何机器上运行

c++ - 当我尝试运行简单的 "Hello World"代码时,Visual Studio 2010 崩溃了吗?

c# - 在using语句中调用异步方法

c# - 常用操作的图标与文本

visual-studio-2010 - 在 C# 中打印到网络打印机