使用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>
Run Code Online (Sandbox Code Playgroud)
但是,MSBuild抱怨文件"input1a; input1b"不存在.似乎string-> items转换发生在表达式求值之前.
除了编写自己的依赖项检查之外,还有其他解决方案吗?
Tho*_*fer 18
如果项目组以编译结果的相反方式设置为元数据,则检查多个依赖项.
<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>
Run Code Online (Sandbox Code Playgroud)
而不是手动转换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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4054 次 |
| 最近记录: |