Второй выполняемый элемент CustomBuild всегда регистрирует «Все выходные данные обновлены» - PullRequest
0 голосов
/ 30 апреля 2019

Я пытался добавить второй шаг CustomBuild в проект контента, используя цели MSBuild.Это первое включение (которое компилирует GLSL в SPIR-V) прекрасно работает с элементом CustomBuild.Однако второй вариант, который я пробовал, всегда записывает в журнал «Все данные обновлены».Я совершенно новичок в MSBuild, поэтому я уверен, что делаю глупости.Любой общий ввод в мой сценарий также приветствуется:)

Я попытался преобразовать второй элемент CustomBuild в элемент Exec практически с помощью той же команды, которая работала нормально.Насколько я знаю, это не даст мне доступ к функциональности трекера.Я также пытался использовать другой TrackerLogDirectory, но, похоже, это не имело никакого эффекта.Я также проверил входные файлы, и они передаются правильно.

Это первый (рабочий) файл целей:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)spv.xml" />
    <AvailableItemName Include="SPIRVShader">
      <Targets>CompileGlslShaders</Targets>
    </AvailableItemName>
  </ItemGroup>

  <Target Name="CompileGlslShaders" Condition="'@(SPIRVShader)' != ''" BeforeTargets="FinalizeBuildStatus">
    <MakeDir Directories="$(OutDir)Shaders;$(IntDir)$(ProjectName).tlog"/>

    <ItemGroup>
      <SPIRVShader>
        <Outputs>$(OutDir)Shaders\%(Filename)%(Extension).spv</Outputs>
        <Command>glslangValidator -V -o "$(OutDir)Shaders\%(Filename)%(Extension).spv" "%(FullPath)"</Command>
      </SPIRVShader>
    </ItemGroup>

    <CustomBuild 
      Sources="@(SPIRVShader)" 
      MinimalRebuildFromTracking="True"
      TrackerLogDirectory="$(IntDir)$(ProjectName).tlog\"
      ErrorListRegex="(?'CATEGORY'ERROR|WARNING): (?'FILENAME'.+):(?'LINE'\d+): (?'TEXT'.*)"/>
  </Target>
</Project>

И это второй:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)pum.xml" />
    <AvailableItemName Include="PuModel">
      <Targets>CompilePlutoniumModels</Targets>
    </AvailableItemName>
  </ItemGroup>

  <Target Name="CompilePlutoniumModels" Condition="'@(PuModel)' != ''" BeforeTargets="FinalizeBuildStatus">
    <MakeDir Directories="$(OutDir)Models;$(IntDir)$(ProjectName).tlog"/>

    <ItemGroup>
      <CompileModels>
        <Outputs>$(OutDir)Models\%(Filename).pum</Outputs>
        <Command>"$(SolutionDir)..\..\bin_$(PlatformTarget)_$(Configuration)_ContentCompiler\ContentCompiler" -o "$(OutDir)Models\%(Filename).pum" "%(FullPath)"</Command>
      </CompileModels>
    </ItemGroup>

    <CustomBuild
      Sources="@(CompileModels)"
      MinimalRebuildFromTracking="True"
      TrackerLogDirectory="$(IntDir)$(ProjectName).tlog\"
      ErrorListRegex="(?'CATEGORY'ERROR|WARNING): (?'FILENAME'.+):(?'LINE'\d+): (?'TEXT'.*)"/>
  </Target>
</Project>

Я ожидаю, что CustomBuild будет работать так же, как и первый, и создаст новые tlog-файлы для проверки.В настоящее время он просто выполняет задачу MakeDir и затем говорит: «Все выходные данные обновлены».

Редактировать: После еще одного тестирования я обнаружил, что вторая задача CustomBuild не 'даже не хочу запускаться, если я отключу первый.Цель по-прежнему вызывается в обоих сценариях («CompilePlutoniumModels вызывают!» Регистрируется).Но даже простое эхо не хочет входить самостоятельно:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)pum.xml" />
    <AvailableItemName Include="PuModel">
      <Targets>CompilePlutoniumModels</Targets>
    </AvailableItemName>
  </ItemGroup>

  <Target Name="CompilePlutoniumModels" Condition="'@(PuModel)' != ''" BeforeTargets="FinalizeBuildStatus">
    <MakeDir Directories="$(OutDir)Models;$(IntDir)$(ProjectName)_$(MSBuildThisFileName).tlog"/>
    <Message Importance="high" Text="CompilePlutoniumModels called!"/>

    <ItemGroup>
      <CompileModels>
        <Command>echo CompileModels called!</Command>
      </CompileModels>
    </ItemGroup>

    <CustomBuild
      Sources="@(CompileModels)"
      MinimalRebuildFromTracking="True"
      TrackerLogDirectory="$(IntDir)$(ProjectName)_$(MSBuildThisFileName).tlog\"/>
  </Target>
</Project>

1 Ответ

0 голосов
/ 01 мая 2019

Я думал, что свойство Sources в задаче CustomBuild будет ссылкой на элемент, который будет содержать шаг сборки.Я понял, что это должно иметь то же имя, что и ItemType или ContentType.Поэтому я изменил свой второй файл целей на:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)pum.xml" />
    <AvailableItemName Include="PuModel">
      <Targets>CompilePlutoniumModels</Targets>
    </AvailableItemName>
  </ItemGroup>

  <Target Name="CompilePlutoniumModels" Condition="'@(PuModel)' != ''" BeforeTargets="FinalizeBuildStatus">
    <MakeDir Directories="$(OutDir)Models;$(IntDir)$(ProjectName)_$(MSBuildThisFileName).tlog"/>

    <ItemGroup>
      <PuModel>
        <Outputs>$(OutDir)Models\%(Filename).pum</Outputs>
        <Command>call "$(SolutionDir)..\..\bin_$(PlatformTarget)_$(Configuration)_ContentCompiler\ContentCompiler" -o "$(OutDir)Models\%(Filename).pum" "%(FullPath)"</Command>
      </PuModel>
    </ItemGroup>

    <CustomBuild
      Sources="@(PuModel)"
      MinimalRebuildFromTracking="True"
      TrackerLogDirectory="$(IntDir)$(ProjectName)_$(MSBuildThisFileName).tlog\"/>
  </Target>
</Project>
...