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

4
我希望使用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 任务,目标 BeforeBuild 被调用,但是 exe 文件仍然具有标准生成的编号,如下所示:文件版本:3.2.5.27547。
我期望看到类似于 3.2.5.111 的内容(作为 MSBuild 参数传递的构建号)。
由于 Version 任务正在覆盖 Revision 的“*”值的默认处理,我认为实际上不需要修改 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个回答

2
我已经找到解决此问题的方法:如何覆盖版本号

最后,我必须在构建过程中更新每个项目的AssemblyInfo文件。因此,在构建服务器(TeamCity)中,我将所需的代码放置在Microsoft.Common.targets文件中,以便不需要在每个项目中都进行要求,并将发布号和TeamCity构建号传递给每个构建任务。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接