AssemblyVersion和AssemblyFileVersion在一个单独的文件中

时间:2014-03-07 10:32:14

标签: c# .net tfs msbuild assemblyinfo

我们在单独的属性文件中包含AssemblyVersionAssemblyFileVersion属性。这是因为它们在所有项目之间“链接”并由构建服务器更新。我们不希望在每次构建或发布后手动更新版本。

AssemblyInfo.cs

[assembly: AssemblyTitle("MyProductTitle")]
[assembly: AssemblyCulture("")]
[assembly: Guid("579eb194-08f1-44fc-9422-21aaf6cb2963")]

AssemblyVersionInfo.cs

[assembly: AssemblyFileVersion("0.0.14056.19")]
[assembly: AssemblyVersion("0.0.0.0")]

问题是我们的构建服务器对每个项目抱怨以下警告:

CA1016 : Microsoft.Design : Add an AssemblyVersion attribute to 'MyProduct.dll'.

在本地构建项目时,bin中的实际DLL文件应用了所有版本号(文件属性对话框):

File properties

在Visual Studio中查看项目属性时,在程序集信息中未检测到版本信息:

VS Project properties

我猜这是因为AssemblyVersionAssemblyFileVersion没有驻留在AssemblyInfo.cs

有没有办法“包含”自定义AssemblyVersionInfo.cs文件?

1 个答案:

答案 0 :(得分:7)

这里出了不止一件事:

  • 该对话框非常空,因为它严格查看AssemblyInfo.cs文件中的属性。如果输入版本号,它会将它们写入该文件。使用单独的文件是一个好主意。

  • Windows“详细信息”属性表与.NET无关,它只显示文件中非托管版本资源的内容。这与C#源代码中的属性间接相关,C#编译器会自动生成属性中的非托管版本资源。遗憾的是,超级重要的[AssemblyVersion]号码没有显示在这个对话框中,XP是最后一个仍然可以显示它的Windows版本。

  • 您可能已获得CA1016,因为您将版本号保留为0。

不显示[AssemblyVersion]的Windows 是跳过该属性的正当理由。如果您在属性表中看到它很重要,那么只需使[AssemblyFileVersion]与[AssemblyVersion]相同即可。请记住它的用途,如果您更改[AssemblyVersion],那么所有项目的引用需要重新编译。

微软的Windows和DevDiv小组之间的历史不佳,我不想深入了解它的细节。我们只是说Windows 非常很少适应.NET。我们有责任解决这个问题。