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

3
我有以下项目结构。
SolutionDir
  -src
    -Feature
    |---Feature.A
    |-----code
    |-------ViewA
    |---------FileA.cshtml
    |---Feature.B
    |-----code
    |-------ViewB
    |---------FileB.cshtml

我希望将此内容复制到目标目录,并按以下结构排列。
-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文件夹下的文件夹结构。您有什么想法可以实现这一点吗?

2个回答

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

1

我认为这是不可能的。

尝试搜索“Exec”命令,您可以指定多个命令或使用批处理文件,在您的情况下可能会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接