【问题标题】:MSBuild: How to recursively copy up to certain parent folders of an itemMSBuild:如何递归复制到项目的某些父文件夹
【发布时间】:2019-08-28 05:37:37
【问题描述】:

我有以下项目结构

SolutionDir
  -src
    -Feature
    |---Feature.A
    |-----code
    |-------ViewA
    |---------FileA.cshtml
    |---Feature.B
    |-----code
    |-------ViewB
    |---------FileB.cshtml

我希望将其复制到以下结构中的 dest 目录

-OutputDir
|--code
|----ViewA
|------ViewA.cshtml
|----ViewB
|------ViewB.cshtml

我在 .csproj 中使用以下脚本

<Target Name="AfterBuild">
<ItemGroup>
  <FeatureViewFiles 
    Include="$(SolutionDir)src\Feature\Feature.*\code\**\*.cshtml" />
</ItemGroup>
<Copy 
  SkipUnchangedFiles="true" 
  SourceFiles="@(FeatureViewFiles)" 
  DestinationFolder="OutputDir\code\%(RecursiveDir)%(Filename)%(Extension)" />
</Target>

现在因为在我的Include 中,通配符从Feature.* 开始,RecursiveDir 指令输出Feature.A\code\ViewA\,而我真正想要的是它从code 文件夹下开始复制文件夹结构。知道我将如何实现这一目标吗?

【问题讨论】:

    标签: c# .net visual-studio msbuild


    【解决方案1】:

    抱歉,恐怕答案是否定的。

    据我所知,这是复制任务的预期行为。如果您在 Feature.* 中使用通配符,它​​将不会从 ViewX 中选择结构。只有指定 Feature.A 或 Feature.B,复制任务才能按预期工作。但我认为这不是你想要的,所以我认为复制任务不能满足你对这个问题的需求。

    除了 Copy 任务,还有一个 Exec 任务,您可以在其中指定命令。它的工作方式类似于使用命令行 cmd.exe。因此,如果有任何命令或批处理文件可以完成这项工作,您可以使用Exec task 来调用它们。但是对于复制任务,目前不支持指定父文件夹级别的行为:(

    另外:我尝试了复制、xcopy 但没有成功。也许您可以尝试robocopy 或任何其他工具。如果它们可以在命令行中工作,那么您可以使用 exec 命令将它们包含在您的构建目标中。

    【讨论】:

      【解决方案2】:

      我相信这是不可能的。

      尝试搜索 Exec 命令,您可以在其中指定多个命令,也可以使用批处理文件,这可能对您的情况有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-10-04
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        相关资源
        最近更新 更多