如何在csproj文件中使用Msbuild.Community.Tasks.Version

时间:2013-05-30 15:44:32

标签: msbuild-task csproj msbuildcommunitytasks

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

该项目有一个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>

我可以看到由于Message Task而调用了目标BeforeBuild但是exe文件仍然具有标准生成的编号,如下所示:文件版本:3.2.5.27547

我期待像3.2.5.111(作为参数传递给MSBuild的内部版本号)。

由于Version任务覆盖了版本I的'*'值的默认处理,因此不认为有必要实际修改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)"/>

但是,当我运行构建时,我可以在Message任务中输出生成的Assembly Version,但exe文件仍然具有以前的默认版本

2 个答案:

答案 0 :(得分:2)

我在这里得到了一个解决方案:How to override the revision number

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

答案 1 :(得分:0)

修订版是自2000年1月1日起将其设置为自动时的天数 - 如果需要,您可以提供自己的“StartDate”。