2011-08-23 51 views
5

我使用MSBuild Community Task library來得到當前SVN版本的集合,在我的程序集信息文件獲得最終編譯的.dll文件的修訂來設置基於.NET的DLL的SVN版本號。如何使用的MSBuild社區任務庫正確

正如你所知,SVN版本可以像「28」或「28M」 - 如果有修改。如果我做了一個MSBuild消息並輸出版本屬性,我看到我得到了修改後的28M,但在更新AsseblyInfo時,我一直只獲得28版本號..?

我想有版本號的28M指示DLL使用修改非檢查建成。我怎樣才能做到這一點?

<Target Name="Compile"> 
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(SvnTool)"> 
    <Output TaskParameter="Revision" PropertyName="Revision" /> 
</SvnVersion> 

<ItemGroup> 
    <AssemblyInfoFiles Include="x.a\Properties\AssemblyInfo.cs" /> 
    <AssemblyInfoFiles Include="x.b\Properties\AssemblyInfo.cs" /> 
</ItemGroup> 

<FileUpdate Files="@(AssemblyInfoFiles)" 
      Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" 
      ReplacementText="$(MajorVersion).$(MinorVersion).$(Revision).0" /> 

<MSBuild Projects="$(MSBuildProjectDirectory)\ConfigExplorer.sln" Targets="Rebuild" Properties="Configuration=$(BuildType);" /> 

+2

因爲修訂聲明爲'版本類int'你不能有28M的版本號:'public int Revision {get; }'。但是,您可以使用AssemblyInformationalVersionAttribute屬性來代替您喜歡的任何文本。 –

回答

4

.NET程序集的版本號是嚴厲類型。它們不只是任何字符串,而是ushorts,這意味着它們的最大值爲65535(請參閱文檔http://msdn.microsoft.com/en-us/library/cbf1574z.aspx)。如果您使用svn修訂版(正如我在某一點上所做的那樣),一旦它超過了這個幻數,構建就會中斷。

我也使用過一個方案,表明開發人員構建與CI構建是使用{year}.{month}.{day}.{build}形式的版本,其中構建編號是使用額外構建參數指定的。這給了我們構建的日期,以及指示,如果它是一個開發版本(即最後一個組件是零)

+0

您指出了SVN修訂號的問題,如果@Riri決定使用另一種方式來生成版本號,也許他/她會覺得這很有用,http://archive.msdn.microsoft.com/AssemblyInfoTaskvers –