2011-06-14 74 views
1

我希望找到一种方法来在构建期间在我的csproj文件中设置值作为值。 MSBuild中是否有任务可以将属性永久设置为一个值?在下面的例子中,我可以永久设置CustomValue = Yes吗?MSBuild:永久更改项目的PropertyGroup属性

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    ..... 
    <CustomValue>XXXX</CustomValue 
    <FileAlignment>512</FileAlignment> 
    <ProjectTypeGuids></ProjectTypeGuids> 
    <SccProjectName>SAK</SccProjectName> 
    <SccLocalPath>SAK</SccLocalPath> 
    <SccAuxPath>SAK</SccAuxPath> 
    <SccProvider>SAK</SccProvider> 
    </PropertyGroup> 

回答

3

您可以使用XmlPoke任务来做到这一点。这样改变项目似乎有点奇怪。或者,你可以设置一个微小的导入文件,

<!-- in your main project file, right below the PropertyGroup --> 
<Import 
    Condition="Exists('Custom.props')" 
    Project="Custom.props" 
    /> 

然后动态创建此属性文件,如,

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

您可以上使用XmlPoke只是这.props文件,或使用WriteLinesToFile来创建整个文件。这个辅助文件不需要检入到源代码控制中,当文件不存在时,导入条件使项目有效。

的XmlPoke任务是这样的,

<XmlPoke 
    XmlInputPath="./Custom.props" 
    Namespaces="&lt;Namespace Prefix='x' 
     Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;" 
    Query="//x:PropertyGroup/x:CustomValue/@Value" 
    Value="True" 
    /> 
+0

这工作了巨大的。谢谢。 – 2011-06-14 19:24:35

+0

很酷,不知道MsBuild 4.0中有一个Xml更新任务。在社区任务库中一直使用XmlUpdate,但将来我会使用内置的XmlUpdate。 – 2011-06-15 13:27:09