-6ren">
gpt4 book ai didi

msbuild - 如何从 msbuild 项目文件本身中使用不同的参数调用相同的 msbuild 目标两次

转载 作者:行者123 更新时间:2023-12-03 14:43:00 34 4
gpt4 key购买 nike

我有以下一段 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) ,前提是它们尚未存在且不是最新的。

但目标 CopyToDirACopyToDirB除了一份复制到 $(DirA) 外,看起来完全一样另一个 - 到 $(DirB) .是否可以将它们统一为一个首先使用 $(DirA) 调用的目标?然后用 $(DirB) ?

谢谢。

最佳答案

您应该能够生成一个 ItemGroup 包含 Dirs 然后 % 。

<ItemGroup>
<Dirs Include="C:\DirA\;C:\DirB\">
</ItemGroup>
<Target Name="CopyFiles"
Condition="Exists('%(Dirs)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '%(Dirs)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="%(Dirs)" />
</Target>

或者您可以进行 2 次显式调用:
<Target Name="CopyFiles">
<MsBuild Projects="$(MSBuildProjectFullPath)" Targets="CopyASetOfFiles" Properties="FilesToCopy=@(FilesToCopy);DestDir=$(DirA)" />
<MsBuild Projects="$(MSBuildProjectFullPath)" Targets="CopyASetOfFiles" Properties="FilesToCopy=@(FilesToCopy);DestDir=$(DirB)" />
</Target>

<Target Name="CopyASetOfFiles"
Condition="Exists('$(DestDir)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '$(DestDir)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(DestDir)" />
</Target>

我没有测试过这两种语法,但对第二种语法相对更有信心。

(答案,如果有的话,在我 table 上的 Sayed Hashimi 书中——你必须等到第一个:
  • 获取图书
  • 我觉得无聊
  • Sayed 找到了这篇文章并提出了一个经过测试的绝妙答案)
  • 关于msbuild - 如何从 msbuild 项目文件本身中使用不同的参数调用相同的 msbuild 目标两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1294147/

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