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

Visual studio 2010 通过MSBuild从None ItemGroup复制项时保留目录结构,visual-studio-2010,msbuild,itemgroup,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" /> </ItemGro

在我的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>

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

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

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


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

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

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

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


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