如何从 msbuild 项目文件本身中使用不同的参数调用相同的 msbuild 目标两次
我有以下一段 msbuild 代码:
<PropertyGroup>
<DirA>C:\DirA\</DirA>
<DirB>C:\DirB\</DirB>
</PropertyGroup>
<Target Name="CopyToDirA"
Condition="Exists('$(DirA)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '$(DirA)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(DirA)" />
</Target>
<Target Name="CopyToDirB"
Condition="Exists('$(DirB)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '$(DirB)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(DirB)" />
</Target>
<Target Name="CopyFiles" DependsOnTargets="CopyToDirA;CopyToDirB"/>
因此,调用目标 CopyFiles
将相关文件复制到 $(DirA)
和 $(DirB)
,前提是它们尚未存在并且是最新的。
但目标 CopyToDirA
和 CopyToDirB
看起来相同,只是一个复制到 $(DirA)
,另一个复制到 $(DirB)< /代码>。是否可以将它们统一为一个目标,首先使用
$(DirA)
调用,然后使用 $(DirB)
调用?
谢谢。
I have the following piece of msbuild code:
<PropertyGroup>
<DirA>C:\DirA\</DirA>
<DirB>C:\DirB\</DirB>
</PropertyGroup>
<Target Name="CopyToDirA"
Condition="Exists('$(DirA)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '$(DirA)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(DirA)" />
</Target>
<Target Name="CopyToDirB"
Condition="Exists('$(DirB)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '$(DirB)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(DirB)" />
</Target>
<Target Name="CopyFiles" DependsOnTargets="CopyToDirA;CopyToDirB"/>
So invoking the target CopyFiles
copies the relevant files to $(DirA)
and $(DirB)
, provided they are not already there and up-to-date.
But the targets CopyToDirA
and CopyToDirB
look identical except one copies to $(DirA)
and the other - to $(DirB)
. Is it possible to unify them into one target first invoked with $(DirA)
and then with $(DirB)
?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您应该能够生成一个包含 Dirs 的 ItemGroup,然后生成 % 。
或者您可以执行两次显式调用:
我还没有测试过这两种语法,但我对第二种语法相对更有信心。
(答案,如果有的话,就在我桌子上的 Sayed Hashimi 书中 - 你必须等到第一本:
You should be able to generate an ItemGroup containing the Dirs and then % on that.
Or you can do 2 explicit calls:
I haven't tested either syntax, but am relatively more confident of the second.
(The answer, if there is one, is in my Sayed Hashimi book on my desk - you'll have to wait until the first of:
正如有人已经提到的,答案是批处理。
以下是一些链接:
As someone already mentiond the answer is batching.
Here are some links:
是的,您想要的就是 MSBuild 中的批处理。 输出中的定义
将导致针对 Dirs ItemGroup 中的每个项目执行此任务。
输出:
将消息任务更改为复制任务,并满足以下条件,您就完成了:
Yes, what you want is called batching in MSBuild. The
Defined in the Outputs will cause this task to be executed for each item in the Dirs ItemGroup.
Outputs:
Change the Message task to Copy task with the following condition and you are done: