2

我正在使用 MSBuild 和MSBuild 扩展,我正在寻找一种方法来确定我的构建是在哪台机器上进行的。

我想基于此修改我们的部分版本号,以便开发人员可以判断是否在开发机器、生产构建盒等上进行了构建。人。

我认为使用 $(COMPUTERNAME) 将是一个好的开始,但我该如何进行比较?

例子:

3.2.0.416 -> 0 会告诉我们该构建是非官方的开发构建。

3.2.1.417 -> 1 会告诉我们这个版本是在我们的 QA CI 盒子上生成的。

谁能指出我正确的方向?我发现这篇文章是一个很好的起点(Setting .NET Assembly Version with Jenkins and TFS

4

1 回答 1

1
  1. 基于 MachineName 创建一个属性。
  2. 在构建之前使用该属性更新 AssemblyInfo.cs 文件。

我在下面有“SubVersionRevision”,但只需使用替代语法来获取 TFS 版本(来自您在原始帖子中的链接)......

解决方案的关键是:设置和使用“MyCustomProperty001”

<Choose>


    <When Condition=" '$(Computername)'=='MyDevMachine' ">               
        <PropertyGroup>
            <MyCustomProperty001>0</MyCustomProperty001>
        </PropertyGroup>
    </When>

    <When Condition=" '$(Computername)'=='MyQaMachine' ">

        <PropertyGroup>
            <MyCustomProperty001>1</MyCustomProperty001>
        </PropertyGroup>

    </When>

    <Otherwise>

        <PropertyGroup>
            <MyCustomProperty001>9</MyCustomProperty001>

        </PropertyGroup>        

    </Otherwise>

</Choose>

<ItemGroup>
  <AssemblyInfoFiles Include="$(ProjectDir)\**\*AssemblyInfo.cs" />
</ItemGroup>

<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(SVNToolPath)">
  <Output TaskParameter="Revision" PropertyName="MySubVersionRevision" />
</SvnVersion>


<FileUpdate Files="@(AssemblyInfoFiles)"
Regex="AssemblyFileVersion\(&quot;(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="AssemblyFileVersion(&quot;$1.$2.$(MyCustomProperty001).$(SubVersionRevision)" />

于 2013-10-11T16:40:05.583 回答