我们在单独的属性文件中具有AssemblyVersion
和AssemblyFileVersion
属性。这是因为它们在所有项目之间“链接”并由构建服务器更新。我们不想在每次构建或发行后都必须手动更新版本。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文件具有应用的所有版本号(文件属性对话框):
在Visual Studio中查看项目属性时,在程序集信息中未检测到版本信息:
我的猜测是这是由于
AssemblyVersion
和AssemblyFileVersion
不驻留在AssemblyInfo.cs
中。有什么办法可以“包含”自定义
AssemblyVersionInfo.cs
文件? 最佳答案
这里有不只一件事出错了:
该对话框非常空,因为它严格查看AssemblyInfo.cs文件中的属性。如果输入版本号,会将它们写入该文件。使用单独的文件不是一个好主意。
Windows“详细信息”属性表与.NET无关,它仅显示文件中非托管版本资源的内容。 C#编译器仅与C#源代码中的属性间接相关,而C#编译器会根据这些属性自动生成非托管版本资源。可悲的是,此对话框中未显示非常重要的[AssemblyVersion]数字,XP是仍可以显示该数字的最后一个Windows版本。
您可能得到了CA1016,因为您将版本号保留为0。
Windows不显示[AssemblyVersion]并不是跳过该属性的充分理由。如果重要的是要在属性表中看到它,则只需使[AssemblyFileVersion]与[AssemblyVersion]相同即可。请记住它的用途,如果更改[AssemblyVersion],则需要重新编译所有引用该程序集的项目。
在Microsoft的Windows和DevDiv小组之间有糟糕的历史,我不想详细介绍它。仅仅说Windows几乎无法容纳.NET。解决这个问题取决于我们。