msbuild包含/从子目录复制到根目录 - 可能吗?

时间:2011-08-16 20:16:30

标签: visual-studio-2010 msbuild tfs2010 csproj itemgroup

我可以在子目录中包含一个文件,但是将它放在bulid的根目录而不是原始的子目录中吗?

示例:我们为不同的发布配置提供了多个robots.txt文件。这些文件位于解决方案中\ IncludeTest \ Development \ robots.txt和\ IncludeTest \ Production \ robots.txt

我可以使用以下内容动态地抓住它们:

  <ItemGroup Condition=" '$(Configuration)' == 'Development' ">
    <Content Include="IncludeTest\Development\robots.txt">
      <SubType>Designer</SubType>
    </Content>
  </ItemGroup>

但是当我这样做时,我会维护\ IncludeTest \ Development \(或\ IncludeTest \ Production)目录。任何方式只是将它包含在根目录中,其中robots.txt应该是?

2 个答案:

答案 0 :(得分:1)

上述内容仍然无法完全适用于我,但我能够根据您设置项目组的方式找到解决方法:

将解决方案中的文件作为链接包含在根目录中。使用$(配置)提示,我能够做到这一点,并将其作为链接动态包含,而不是将其复制到根目录。

<Content Include="..\Robots_Source\$(Configuration)\robots.txt">
  <Link>robots.txt</Link>
</Content>

答案 1 :(得分:0)

我不确定我的问题是否正确,请告诉我这项工作是否符合您的预期:

 <ItemGroup>
    <Content Include = "IncludeTest\$(Configuration)\robots.txt">
      <SubType>Designer</SubType>
    </Content>
  </ItemGroup>

复制到root:

<Copy SourceFiles="@(Content)" 
   DestinationFiles="@(Content ->'..\%(RecursiveDir)%(Filename)%(Extension)')" />

编辑:当文件在嵌套目录中时可能会出现问题,请试试:

 <Copy SourceFiles="@(Content)" 
   DestinationFiles="@(Content ->'$(MSBuildProjectDirectory)..\%(RecursiveDir)%(Filename)%(Extension)')" />