第二次执行 CustomBuild 项目总是记录 "All outputs are up-to-date"
Second executing CustomBuild item always logs "All outputs are up-to-date"
我一直在尝试使用 MSBuild 目标向内容项目添加第二个 CustomBuild 步骤。这首先(将 GLSL 编译为 SPIR-V)与 CustomBuild 项目配合良好。然而,我尝试的第二个,总是记录 "All outputs are up-to-date"。我对 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 任务然后说:"All outputs are up-to-date".
编辑:
经过更多测试后,我发现如果我禁用第一个,第二个 CustomBuild 任务甚至不想 运行。在这两种情况下仍会调用目标("CompilePlutoniumModels called!" 正在记录)。但即使是简单的回显也不想自己登录:
<?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>
我认为 CustomBuild 任务中的 Sources 属性 将是包含构建步骤的项目的 link。我发现这需要与 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>
我一直在尝试使用 MSBuild 目标向内容项目添加第二个 CustomBuild 步骤。这首先(将 GLSL 编译为 SPIR-V)与 CustomBuild 项目配合良好。然而,我尝试的第二个,总是记录 "All outputs are up-to-date"。我对 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 任务然后说:"All outputs are up-to-date".
编辑: 经过更多测试后,我发现如果我禁用第一个,第二个 CustomBuild 任务甚至不想 运行。在这两种情况下仍会调用目标("CompilePlutoniumModels called!" 正在记录)。但即使是简单的回显也不想自己登录:
<?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>
我认为 CustomBuild 任务中的 Sources 属性 将是包含构建步骤的项目的 link。我发现这需要与 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>