mar*_*ark 16 msbuild msbuild-task
我有以下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"/>
Run Code Online (Sandbox Code Playgroud)
因此,调用目标CopyFiles会将相关文件复制到,$(DirA)并且$(DirB)只要它们尚未存在并且是最新的.
但目标CopyToDirA和CopyToDirB看起来相同,除了一个副本$(DirA)和另一个 - 到$(DirB).是否有可能将它们统一到一个首先调用的目标中$(DirA)然后用$(DirB)?
谢谢.
Rub*_*ink 14
您应该能够生成包含Dirs的ItemGroup,然后生成%.
<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>
Run Code Online (Sandbox Code Playgroud)
或者您可以进行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>
Run Code Online (Sandbox Code Playgroud)
我没有测试过任何一种语法,但对第二种语法相对更有信心.
(答案,如果有的话,就在我桌上的Sayed Hashimi书中 - 你必须等到第一个:
正如有人已经提到的那样,答案就是批处理.
以下是一些链接:
| 归档时间: |
|
| 查看次数: |
10380 次 |
| 最近记录: |