通过MSBuild从None ItemGroup复制项目时保留目录结构

时间:2012-08-02 00:37:34

标签: visual-studio-2010 msbuild itemgroup

在我的cpp项目文件中,我有一个如下定义的项目组:

<ItemGroup>
    <None Include="dir1\file1" />
    <None Include="dir1\blah.dll" />
    <None Include="dir1\dir2\something.dll" />
    <None Include="dir1\dir2\dir3\another_file.dll" />
</ItemGroup>

我有一个AfterBuild目标,我希望将上述文件(并保留其目录结构)复制到一个新位置,例如:

<Target Name="AfterBuild">
    <Copy SourceFiles="@(None)" DestinationFiles="@(None->'$(NewDirectory)%(RecursiveDir)%(Filename)%(Extension)')" ContinueOnError="false" />
</Target>

注意:$(NewDirectory)在其他地方定义。

但是,上面只是将文件复制到$(NewDirectory),但忽略了项目列表的目录结构(即Dir1,Dir2和Dir3)。有没有办法在不必创建新列表的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

我刚刚解决了这个问题!用%(RelativeDir)替换%(递归),即:

<Copy SourceFiles="@(None)" DestinationFiles="@(None->'$(NewDirectory)%(RelativeDir)%(Filename)%(Extension)')" ContinueOnError="false" />

答案 1 :(得分:0)

如果要保留目录结构,请使用以下命令:

<Copy SourceFiles="@(None)" DestinationFolder="$(NewDirectory)\%(None.RelativeDir)" />