c# - 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
。知道我将如何实现这一目标吗?
解决方案
抱歉,恐怕答案是否定的。
据我所知,这是复制任务的预期行为。如果您在 Feature.* 中使用通配符,它将不会从 ViewX 中选择结构。只有指定 Feature.A 或 Feature.B,复制任务才能按预期工作。但我认为这不是你想要的,所以我认为复制任务不能满足你对这个问题的需求。
除了 Copy 任务,还有一个 Exec 任务,您可以在其中指定命令。它的工作方式类似于使用命令行 cmd.exe。因此,如果有任何命令或批处理文件可以完成这项工作,您可以使用Exec 任务来调用它们。但是对于复制任务,目前它不支持指定父文件夹级别的行为:(
另外:我尝试了copy,xcopy但没有运气。也许您可以尝试robocopy或任何其他工具。如果它们可以在命令行中工作,那么您可以使用 exec 命令将它们包含在您的构建目标中。
推荐阅读
- android - BottomNavigation popBackStack() 导航到 startDestination 而不是上一个片段
- c# - 如何配置动作
依赖注入 - docker - AWS ECS 根据环境指定配置文件
- github-actions - 用于在远程 Windows 服务器上运行 Powershell 脚本的 Github Action
- c - msync 中标志 MS_INVALIDATE 的确切含义是什么?
- c++ - 模板化需求表达式
- machine-learning - 数据科学家在教程中使用数据源 csv,为什么不使用连接数据库?
- c# - 从 iOS 设备读取和写入文本文件
- selenium - 量角器 - 如果存在元素,则执行此操作,否则跳过
- python - 如何在 sympy 表达式/ Python 中获取系数