如何正确使用MSBuild社区任务库在.NET dll上设置SVN版本号

Rir*_*iri 5 .net svn msbuild

我正在使用MSBuild社区任务库来获取当前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);" />
Run Code Online (Sandbox Code Playgroud)

cra*_*igb 4

.Net 程序集版本号是严格键入的。它们不仅仅是任何字符串,而是 ushorts,这意味着它们的最大值为 65535(请参阅文档http://msdn.microsoft.com/en-us/library/cbf1574z.aspx)。如果您使用 svn 修订版(就像我在某一时刻所做的那样),一旦超过该神奇数字,您的构建就会中断。

我还使用了一个表示开发人员构建与 CI 构建的方案,即使用{year}.{month}.{day}.{build}通过额外的构建参数指定构建号的形式的版本。这为我们提供了构建日期,并指示它是否是开发人员构建(即最后一个组件为零)