MSBuild: навсегда изменить свойство PropertyGroup проекта - PullRequest
1 голос
/ 14 июня 2011

Я надеялся найти способ установить значение в моем файле 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 Ответ

3 голосов
/ 14 июня 2011

Для этого вы можете использовать задачу 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"
     />
...