2013-05-30 92 views
4

我想使用MSBuild社区任务中的VersionTask来设置Revision计算类型。但是,我很难理解如何在我的csproj文件中实际连接任务。如何在csproj文件中使用Msbuild.Community.Tasks.Version

该项目具有规定的下列属性的AssemblyInfo.cs中:

[assembly: AssemblyVersion("3.2.5.*")] 

我想要做的是过度乘坐版本号与自己的自定义操作处理的产生。

我已经把定制版任务到的csproj文件,如下所示:

<UsingTask TaskName="MyCo.Build.Tasks.Version" AssemblyFile="$(SolutionDir)\..\Build\.build\MyCo.Build.Tasks.dll" /> 

实际的任务,然后调用如下:

<Target Name="BeforeBuild"> 
<Message Text="Setting Revision Number to $(BuildNumber)" /> 
<MyCo.Build.Tasks.Version RevisionType="BuildServerNumber" Revision="$(BuildNumber)" /></Target> 

我可以看到目标BeforeBuild被调用,因为的消息任务,但exe文件仍然有标准生成编号如下:文件版本:3.2.5.27547

我期待像3.2.5.1 11(作为参数传入MSBuild的内部版本号)。

由于Version任务覆盖默认处理'*'值的版本,我不认为有必要实际修改AssemblyInfo.cs文件。

我是否需要将Version任务的输出值传递给MSBuild参数?我是否真的需要使用AssemblyVersion任务来更新文件中的值?

很显然,我试图避免不得不改变AssemblyInfo.cs,我只是想重写版本号处理。

有人可以提醒吗?

编辑:我刚刚在安装程序的部分回答我的问题的chm文件中找到以下使用示例。

  <Version BuildType="Automatic" RevisionType="Automatic" Major="1" Minor="3" > 
      <Output TaskParameter="Major" PropertyName="Major" /> 
      <Output TaskParameter="Minor" PropertyName="Minor" /> 
      <Output TaskParameter="Build" PropertyName="Build" /> 
      <Output TaskParameter="Revision" PropertyName="Revision" /> 
     </Version> 
     <Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)"/> 

然而,当我运行构建我可以输出生成的程序集版本在消息的任务,但exe文件仍然有默认的修订为之前

回答

2

我得到了解决这一位置:How to override the revision number

最后,我不得不在生成过程中实际更新每个项目的AssemblyInfo文件。因此,在构建服务器(TeamCity)上,我将需要的代码放入Microsoft.Common.targets文件中,以便在每个项目中都不需要广告,然后将版本号和TeamCity内部版本号传递给每个构建任务。

0

版本为天数自1 /当您将其设置为自动时为1/2000 - 如果需要,您可以提供自己的“StartDate”。

相关问题