MSBuild:永久更改项目的PropertyGroup属性

时间:2011-06-14 18:07:41

标签: c#-4.0 tfs msbuild msbuild-task

我希望在构建一个值时找到一种在csproj文件中设置值的方法。我可以使用MSBuild中的任务将属性永久设置为值吗?在下面的示例中,我可以永久设置CustomValue = Yes吗?

<?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>

1 个答案:

答案 0 :(得分: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>

您可以在此.props文件上使用XmlPoke,也可以使用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"
     />