MSBuild:更新自定义项目属性

时间:2011-06-13 23:51:23

标签: msbuild

我正在尝试在构建期间更新以下自定义属性(这是我的一个项目文件中的自定义属性:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TestVersion>False</TestVersion>

我尝试将UpdateElement与MSBuild扩展包一起使用。我也尝试使用“SolutionToBuild”的属性设置进行设置,但似乎没有设置值。

我尝试过的一些事情:

      <ItemGroup>
        <SolutionToBuild Include="$(BuildProjectFolderPath)/../../$(SuiteSourceBranchRoot)/Source/XXX/Suite.sln">
          <Targets></Targets>
          <Properties>TestVersion=True;</Properties>
          <CustomPropertiesForBuild>TestVersion=True;</CustomPropertiesForBuild>
        </SolutionToBuild>
      </ItemGroup>

<XmlFile
  File ="$(SolutionRoot)\$(SuiteSourceBranchRoot)\Source\XXX\XXX\Sample.csproj"
  TaskAction="UpdateElement"
  XPath="/Project/PropertyGroup/TestVersion"
  InnerText="True"
  />

我需要在两个项目中设置这个值,因为我选择何时关闭此值。

谢谢。

2 个答案:

答案 0 :(得分:0)

要允许覆盖属性,仅在未设置值时设置其默认值:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <TestVersion Condition="'$(TestVersion)' != ''">False</TestVersion>

答案 1 :(得分:0)

尝试使用AdditionalProperties,

  <ItemGroup>
    <SolutionToBuild Include=".../Suite.sln">
      <Targets></Targets>
      <AdditionalProperties>TestVersion=True</AdditionalProperties>
    </SolutionToBuild>
  </ItemGroup>

现在执行此操作(或使用上面的属性)仅在您创建的项目数组时应用,在这种情况下@(SolutionToBuild)将传递给MSBuild任务。

从你的问题看你想要做什么有点困难,但使用XML来改变项目文件是不可取的。根据您的尝试,有一种改变财产的正确方法。改变这个属性的场景是什么?它来自命令行,还是来自构建机器脚本?