2013-10-11 32 views
2

我正在使用MSBuild和MSBuild Extensions,我正在寻找一种方法来确定我的构建正在进行什么样的机器。如何使用MSBuild脚本确定构建来源?

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

我认为使用$(COMPUTERNAME)会是一个好的开始,但我怎么可以做比较?

例子:

3.2.0.416 - >的0会告诉我们,构建是一个非官方的开发建设。

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

任何人都可以指向正确的方向吗?我发现这篇文章是一个很好的起点(Setting .NET Assembly Version with Jenkins and TFS

+0

为什么在生产构建服务器之外的任何构建上设置版本号?你为什么在两个不同的盒子上建造?开发我得到,但为什么你有一个“质量保证CI服务器”和生产构建盒? –

+0

我只是用它作为一个复杂的例子。因为这不是问题的关键,所以我不会评论这些。但要直接回答您,我们有CI,但我们的生产版本是手动完成的,因为需要一些额外的步骤,我们目前没有自动化。然而这在很大程度上是不相关的。 – Ray

回答

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)" /> 

相关问题