gpt4 book ai didi

MSBuild将多个输入批处理到每个输出中

转载 作者:行者123 更新时间:2023-12-04 05:21:01 26 4
gpt4 key购买 nike

使用MSBuild批处理时是否可以对每个输出的多个输入进行依赖检查?

我以为可以通过在输出文件的元数据中构建输入列表来找到解决方案,如下所示:

<ItemGroup>
<Foo Include="output1">
<Inputs>input1a;input1b</Inputs>
</Foo>
<Foo Include="output2">
<Inputs>input2a;input2b</Inputs>
</Foo>
</ItemGroup>

<Target Name="_CompileFoo" Outputs="@(Foo)" Inputs="%(Foo.Inputs)">
<FooCompiler Src="%(Foo.Inputs)" Out="@(Foo)" />
</Target>

但是,MSBuild提示文件“input1a; input1b”不存在。似乎string-> items转换发生在表达式求值之前。

除了编写自己的依赖项检查之外,还有其他解决方案吗?

最佳答案

如果以相反的方式将项目组设置为将编译结果作为元数据,则检查多个依赖项是可行的。

<ItemGroup>
<Foo Include="input1a">
<Result>output1</Result>
</Foo>
<Foo Include="input1b">
<Result>output1</Result>
</Foo>
<Foo Include="input2a">
<Result>output2</Result>
</Foo>
<Foo Include="input2b">
<Result>output2</Result>
</Foo>
</ItemGroup>

<Target Name="_CompileFoo" Inputs="@(Foo)" Outputs="%(Result)">
<FooCompiler Overwrite="true" Src="@(Foo)" Out="%(Foo.Result)"/>
</Target>

而且,除了手动转换 Foo项目组外,您还可以在先决条件目标中对其进行转换,如下所示,构建新的项目组 _Foo
<ItemGroup>
<Foo Include="output1">
<Inputs>input1a;input1b</Inputs>
</Foo>
<Foo Include="output2">
<Inputs>input2a;input2b</Inputs>
</Foo>
</ItemGroup>

<Target Name="_PrepareItemsForCompileFoo">
<ItemGroup>
<_Foo Include="%(Foo.Inputs)">
<Result>%(Foo.Identity)</Result>
</_Foo>
</ItemGroup>
</Target>

<Target Name="_CompileFoo" DependsOnTargets="_PrepareItemsForCompileFoo" Inputs="@(_Foo)" Outputs="%(Result)">
<FooCompiler Overwrite="true" Src="@(_Foo)" Out="%(_Foo.Result)"/>
</Target>

关于MSBuild将多个输入批处理到每个输出中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6931049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com