我正在使用 VS2010,我试图通过文件引用将一些程序集从本地硬盘添加到我的 C# 项目中。查看 csproj
文件,我发现有时文件引用显示为
<Reference Include="name">
但有时它显示为
<Reference Include="name, Version=xxx, Culture=neutral,
processorArchitecture=MSIL">
什么会导致差异?
受k3b回答的启发,我又做了一个测试。我创建了一个新的类库项目。
添加文件引用。 Properties Pane 中Specific Version 的初始值为False。
csproj
文件看起来像<Reference Include="Name"> <HintPath>...</HintPath> </Reference>
将 Properties Pane 中的 Specific Version 更改为 True。 VS 在
Include
属性中添加版本。<Reference Include="Name, Version=..."> <HintPath>...</HintPath> </Reference>
再次将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/