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

问题描述 投票:0回答:3

我可以包含子目录中的文件,但将其放置在构建文件的根目录而不是其原始子目录中吗?

示例:我们有多个 robots.txt 文件用于不同的发布配置。这些文件在解决方案中为 \IncludeTest\Development obots.txt 和 \IncludeTest\Production 机器人.txt

我可以使用类似的方式动态地抓取它们:

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

但是当我这样做时,我会维护 \IncludeTest\Development\(或 \IncludeTest\Production)目录。有什么方法可以将它包含在根目录中,robots.txt 应该在哪里?

visual-studio-2010 msbuild csproj itemgroup
3个回答
1
投票

以上仍然不完全适合我,但我能够根据您设置项目组的方式找到解决方法:

在解决方案中包含文件作为链接将其放在根目录中。有了你的 $(Configuration) 提示,我能够做到这一点,只需将它作为链接动态包含,而不是将其复制到根目录。

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

0
投票

不确定我是否答对了你的问题,让我知道这是否如你所料:

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

复制到根目录:

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

编辑:当文件位于嵌套目录中时可能会出现问题,因此请尝试:

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

0
投票

这对我有用

文件 logo.png 在子文件夹 resource\image\logo.png 中

<ItemGroup>
    <None Update="resource\image\logo.png">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <TargetPath>logo.png</TargetPath>
    </None>
</ItemGroup>

它被复制到应用程序的根文件夹

© www.soinside.com 2019 - 2024. All rights reserved.