2

我有5個C#項目的Visual Studio解決方案。我想要在每個項目中匹配程序集版本。但它看起來像我必須進入每個項目的屬性,並單擊每個項目一次一個程序集版本。有沒有辦法像解決方案一樣處理解決方案,只有一個版本適用於每個項目?如何自動將我的解決方案中的所有項目設置爲相同版本?

+1

即使它不支持VS2017,我仍然在使用這個插件。 [版本控制構建](https://www.codeproject.com/articles/5851/versioning-controlled-build)您可以添加自定義工具並使用自述文件中介紹的命令行啓動插件。您可以使用它來更改和設置所有版本信息,而無需在每個項目中打開每個AssemblyInfo.cs – Steve

回答

2

剛創建一個文件,例如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文件以及

的結果是,你將有隻有一個文件,你可以設置版本,它將適用於所有項目。

+0

嗯,當我添加一個現有項目時,它似乎會複製一份。因此,對根文件夾中文件的更改不會反映在副本中。 –

+0

啊,你的意思是我用「添加爲鏈接」,不是嗎? –

+0

是的,我更新了答案,以便它現在也包含這些重要信息。謝謝你的評論。 – Gabor

1

我不認爲有任何解決方案級別的選項來做到這一點。我使用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命令行選項啓動它。

1

由於每個項目都有自己的組件,因此它們將被獨立處理。我已經找到了最適合我是使用T4模板和基於它的算法在模板中像這樣在修訂是自1/1/2000幾個小時的計算:

<#@ 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; 
#> 
相關問題