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>

我可以看到由于消息任务而调用了目标 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 文件仍然像以前一样具有默认修订版

4

2 回答 2

2

我在这里得到了一个解决方案:如何覆盖修订号

最后,我不得不在构建过程中实际更新每个项目的 AssemblyInfo 文件。因此,在构建服务器 (TeamCity) 上,我将所需的代码放在 Microsoft.Common.targets 文件中,这样每个项目广告中就不需要它,然后将发布号和 TeamCity 构建号传递给每个构建任务。

于 2013-06-28T08:18:06.607 回答
0

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

于 2013-06-26T15:40:25.500 回答