【问题标题】:MSBuild: Permanently Change PropertyGroup Property of a ProjectMSBuild:永久更改项目的 PropertyGroup 属性
【发布时间】:2011-09-14 22:25:52
【问题描述】:

我希望在构建过程中找到一种方法在我的 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>

【问题讨论】:

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


    【解决方案1】:

    您可以使用 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"
         />
    

    【讨论】:

    • 酷,不知道 MsBuild 4.0 中有 Xml 更新任务。一直在社区任务库中使用 XmlUpdate,但我以后会使用内置的。
    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2011-01-06
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多