我有一个包含5个C#项目的Visual Studio解决方案。我希望程序集版本在每个项目中都匹配。但看起来我必须进入每个项目的属性并一次单击每个项目的程序集版本。有没有办法处理解决方案,就像它只有一个版本作为一个整体适用于每个项目?
答案 0 :(得分:6)
只需创建一个文件,例如解决方案根文件夹中的GlobalAssemblyInfo.cs
然后向其添加必要的属性,最后将其作为现有项添加到每个项目中作为链接。
在Solution Explorer
中右键单击project name > Add > Existing item...
,然后在对话框中从下拉列表中选择Add As Link
选项,如此image所示。
// Content of GlobalAssemblyInfo.cs file
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
请注意:
Properties\AssemblyInfo.cs
文件中删除这些属性。GlobalAssemblyInfo.cs
文件中结果是您只有一个文件可以设置版本,它将适用于所有项目。
答案 1 :(得分:2)
我认为没有任何解决方案级别选项可以执行此操作。我使用powershell脚本来实现我的15个项目的解决方案。
$version= "1.3.0.0"
(Get-ChildItem -Include AssemblyInfo.cs -Recurse ) |
Foreach-Object {
Set-Content $_ ((Get-content $_ -Encoding UTF8) -replace "\d+\.\d+\.(\d+|\*)(\.(\d+|\*))?", $version) -Encoding UTF8
}
将此脚本保存在与解决方案文件相同的目录中。您也可以在解决方案本身中将其添加为解决方案项,并在右键单击脚本文件时从Visual Studio命令行选项启动它。
答案 2 :(得分:1)
由于每个项目都有自己的程序集,因此将独立处理。我发现最适合我的是使用T4模板并将其基于模板中的算法,例如这个版本是自2000年1月1日以来的小时计算:
<#@ template debug="false" hostspecific="false" language="C#" #>
using System.Reflection;
[assembly: AssemblyVersion("1.0.6.<#= this.RevisionNumber #>")]
[assembly: AssemblyFileVersion("1.0.6.<#= this.RevisionNumber #>")]
<#+
int RevisionNumber = (int)(DateTime.UtcNow - new DateTime(2000,1,1)).TotalHours;
#>