MSBuild: Как я могу определить, используя XmlPeek, который можно использовать в задаче ResouceCompile?

Когда я читаю значение из файла XML, оно корректное, но когда я его использую (как вариант для rc.exe), оно не определено. Как я могу это исправить?

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

  <!-- Read custom build number from generated XML file -->
  <Target Name="ReadCustomVersion" BeforeTargets="ResourceCompile">
    <XmlPeek XmlInputPath="$(OutDir)\CustomVersionNumber.xml" Query="/CustomVersion/CustomBuildNumber/text()">
      <Output TaskParameter="Result" ItemName="CustomBuildNumber" />
    </XmlPeek>

    **<!-- Print out the custom build number -- it is correct here -->**
    <Message Text="CustomBuildNumber = @(CustomBuildNumber)">
  </Target>

  <!-- Add version resource -->
  <ItemGroup>
    **<!-- CustomBuildNumber will not be set here -->**
    <ResourceCompile Include="..\..\build\CommonVersionResource.rc">
      <AdditionalOptions>/DBUILD_NUMBER=$(CustomBuildNumber) %(AdditionalOptions)</AdditionalOptions>
    </ResourceCompile>
  </ItemGroup>
</Project>

1 ответ

Используйте атрибут PropertyName в элементе XmlPeek/Output вместо ItemName. Почему вы не добавляете дополнительные опции прямо в вашу цель ReadCusomVersion?

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

<Target Name="SetCustomVersion" BeforeTargets="ResourceCompile">
  <XmlPeek XmlInputPath="$(OutDir)\CustomVersionNumber.xml" Query="/CustomVersion/CustomBuildNumber/text()">
      <Output TaskParameter="Result" PropertyName="CustomBuildNumber" />
  </XmlPeek>

  <ItemGroup>
    <ResourceCompile>
      <AdditionalOptions>/DBUILD_NUMBER=$(CustomBuildNumber) %(AdditionalOptions)</AdditionalOptions>
    </ResourceCompile>
  </ItemGroup>
</Target>

Другие вопросы по тегам