首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSBuild选择部分RecursiveDir

MSBuild选择部分RecursiveDir
EN

Stack Overflow用户
提问于 2020-12-22 08:07:17
回答 1查看 53关注 0票数 1

我有一个项目,看起来像这样:

代码语言:javascript
复制
src\ModuleA\code\somepath\test.js
src\ModuleA\code\ignorethis.txt
src\ModuleB\code\awesome.js
src\ModuleB\code\testing\file.js

我想使用如下的ItemGroup从模块中获取所有这些js文件:

代码语言:javascript
复制
<ItemGroup>
  <_Scripts Include="..\..\..\src\**\code\**\*.js"/>
</ItemGroup>

但是,当我将它们复制到输出中时,我想剥离模块和代码路径。如果我使用这样的副本

代码语言:javascript
复制
<Copy SourceFiles="@(_Scripts)" DestinationFiles="@(Scripts->'..\tmp\Test\%(RecursiveDir)%(Filename)%(Extension)')"/>

结果如下所示(因为RecursiveDir包含从第一个**开始的整个路径)

代码语言:javascript
复制
tmp\Test\ModuleA\code\somepath\test.js
tmp\Test\ModuleB\code\awesome.js
tmp\Test\ModuleB\code\testing\file.js

然而,我试图得到这样的结果:

代码语言:javascript
复制
tmp\Test\somepath\test.js
tmp\Test\awesome.js
tmp\Test\testing\file.js

我尝试通过添加函数的元数据,但我似乎找不到正确的转义需要使其工作。我的上一次尝试是这样的(如果我可以剥离至少1层的文件夹,我假设剥离第二层将是在另一个Meta元素中简单地重复...)

代码语言:javascript
复制
<Scripts Include="@(_Scripts)">
  <NewDir>$(&quot;%(_Scripts.RecursiveDir)&quot;.Substring(0, &quot;%(_Scripts.RecursiveDir)&quot;.IndexOf(&quot;\&quot;)))</NewDir>
</Scripts>

这会产生一个Error MSB4184: The expression <cut for brevity> cannot be evaluated.

有没有更简单的方法,或者谁能告诉我正确的转义序列是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-22 19:05:57

在努力进行转义并对值进行解析和处理之后,我设法使用以下方法解决了这个问题:

代码语言:javascript
复制
<_ScriptsFiles Include="..\..\..\src\*\code\**\*.js"/>
<_Scripts Include="@(_ScriptsFiles)">
  <FirstSlash>$([System.String]::new('%(_ScriptsFiles.RecursiveDir)').IndexOf('\'))</FirstSlash>
  <DirMinusOne>$([System.String]::new('%(_ScriptsFiles.RecursiveDir)').Substring(%(_Scripts.FirstSlash)))</DirMinusOne>
  <SecondSlash>$([System.String]::new('%(_Scripts.DirMinusOne)').IndexOf('\', 1))</SecondSlash>
  <DirMinusTwo>$([System.String]::new('%(_Scripts.DirMinusOne)').Substring(%(_Scripts.SecondSlash)))</DirMinusTwo>
</_Scripts>
<Copy SourceFiles="@(_Scripts)" DestinationFiles="@(_Scripts->'..\..\..\tmp\%(DirMinusTwo)\%(Filename)%(Extension)')"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65401621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档