猿问

MSBuild:如何递归复制到项目的某些父文件夹

我有以下项目结构


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。知道我如何实现这一目标吗?


阿晨1998
浏览 143回答 2
2回答

Cats萌萌

抱歉,恐怕答案是否定的。据我所知,这是复制任务的预期行为。如果您在Feature.*中使用通配符,它不会从ViewX中选择结构。只有当您指定Feature.A或Feature.B时,复制任务才能按您的预期进行。但我认为这不是您想要的,所以我认为复制任务无法满足您对此问题的需求。除了复制任务之外,还有一个可执行任务,您可以在其中指定命令。它的工作方式类似于使用命令行 cmd.exe。因此,如果有任何命令或批处理文件可以完成这项工作,您可以使用Exec 任务来调用它们。但对于复制任务,目前不支持指定父文件夹级别的行为:(另外:我尝试了 copy、xcopy 但没有成功。也许您可以尝试robocopy或任何其他工具。如果它们可以在命令行中工作,那么您可以使用 exec 命令将它们纳入您的构建目标。

至尊宝的传说

我相信这是不可能的。尝试搜索 Exec 命令,您可以在其中指定多个命令,也可以使用批处理文件,这可能对您的情况有帮助。
随时随地看视频慕课网APP
我要回答