2011-06-13 54 views
0

我想我的构建过程中更新下列自定义属性(这是在我的项目文件中的一个自定义属性:的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" 
    /> 

我需要在两个项目中设置此值,因为我有一个选择,当它将关闭此值。

谢谢。

回答

0

尝试使用AdditionalProperties,

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

现在这样做(或使用属性,你有以上)只适用于你正在创建的item数组,在这种情况下@(SolutionToBuild)被传递给MSBuild任务。

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

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>