2011-08-23 52 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 –