我正在使用
MSBuild Community Task library获取当前SVN版本的一个集合,在我的AssemblyInfo文件中获取最终编译的dll中的修订版本.
如您所知,SVN版本可以像“28”或“28M” – 如果有修改.如果我执行MSBuild消息并输出Revision属性,我看到我在修改后得到了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);" />
.Net程序集版本号是严格类型的.它们不仅仅是任何字符串,而是ushorts,这意味着它们的最大值为65535(参见文档
http://msdn.microsoft.com/en-us/library/cbf1574z.aspx).如果您使用svn修订版(就像我在某一点上所做的那样),一旦超过该幻数,您的构建就会中断.
我还使用的方案表明开发人员构建与CI构建是使用{year}.{month}.{day}.{build}形式的版本,其中使用额外的构建参数指定构建号.这给了我们构建的日期,并指出它是否是开发人员构建(即最后一个组件为零)