我一直在尝试使用MSBuild目标向内容项目添加第二个CustomBuild步骤。首先(将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>
答案 0 :(得分:0)
我认为CustomBuild任务中的Sources属性将是指向包含构建步骤的项目的链接。我发现这需要与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>