Я пытался добавить второй шаг 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>