首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用准确的msbuild项“未展开的通配符表达式”值

如何使用准确的msbuild项“未展开的通配符表达式”值
EN

Stack Overflow用户
提问于 2018-08-04 23:46:58
回答 1查看 86关注 0票数 0

我有以下MSBuild .proj文件内容:

代码语言:javascript
复制
<ItemGroup>
  <Exclude Include="*2.*"></Exclude>
</ItemGroup>

<ItemGroup>
  <!-- I have 3 files in the current directory: File1.cpp, File2.cpp and File3.cpp -->
  <ModuleInclude Include="*.cpp" Exclude="@(Exclude)"></ModuleInclude>

  <!-- I have 3 files in the Subfolder directory: eFile1.h, eFile2.h and eFile3.h -->
  <ModuleInclude Include="Subfolder\*.h" Exclude="@(Exclude->'Subfolder\%(identity)')"></ModuleInclude>
</ItemGroup>

<Target Name="Default">
  <Message Text="ModuleIncludes: %(ModuleInclude.identity)" />
  <Message Text="Excluded Items: @(Exclude)" />
  <Message Text="Excluded Subfolder Items: @(Exclude->'Subfolder\%(identity)')" />
</Target>

我看到以下输出:

代码语言:javascript
复制
ModuleIncludes: File1.cpp
ModuleIncludes: File3.cpp
ModuleIncludes: Subfolder\eFile1.h
ModuleIncludes: Subfolder\eFile2.h
ModuleIncludes: Subfolder\eFile3.h
Excluded Items: File2.cpp
Excluded Subfolder Items: Subfolder\File2.cpp

我真正需要的是包含以下子文件夹文件

代码语言:javascript
复制
ModuleIncludes: Subfolder\eFile1.h
ModuleIncludes: Subfolder\eFile3.h

因此,排除的子文件夹项目应为:

代码语言:javascript
复制
Excluded Subfolder Items: Subfolder\eFile2.h

为了能够得到这样的输出,我需要下面的表达式

代码语言:javascript
复制
Subfolder\*2.*

我使用的语法

代码语言:javascript
复制
@(Exclude->'Subfolder\%(identity)')

不能给我我想要的。正确的语法是什么?或者这是不可能的?

EN

回答 1

Stack Overflow用户

发布于 2018-08-05 16:38:10

如果要将通配符作为文本处理,请使用属性而不是项:

代码语言:javascript
复制
<PropertyGroup>
  <FileExcludes>*2.*</FileExcludes>
</PropertyGroup>
<ItemGroup>
  <ModuleInclude Include="*.cpp" Exclude="$(FileExcludes)"></ModuleInclude>
  <ModuleInclude Include="Subfolder\*.h" Exclude="Subfolder\$(FileExcludes)"></ModuleInclude>
</ItemGroup>

您甚至可以在此处使用与子文件夹无关的匹配排除模式:

代码语言:javascript
复制
<PropertyGroup>
  <FileExcludes>**\*2.*</FileExcludes>
</PropertyGroup>
<ItemGroup>
  <ModuleInclude Include="*.cpp" Exclude="$(FileExcludes)"></ModuleInclude>
  <ModuleInclude Include="Subfolder\*.h" Exclude="$(FileExcludes)"></ModuleInclude>
</ItemGroup>

如果您确实需要将其作为列表添加到非本地文件夹的前缀,请使用元数据项:

代码语言:javascript
复制
<PropertyGroup>
  <FileExclude Include="2">
    <Pattern>**\*2.*</Pattern>
  </FileExclude>
</PropertyGroup>
<ItemGroup>
  <ModuleInclude Include="*.cpp" Exclude="@(FileExclude)"></ModuleInclude>
  <ModuleInclude Include="..\shared-folder\*.h" Exclude="@(FileExclude->'shared-folder\%(Pattern)')"></ModuleInclude>
</ItemGroup>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51687206

复制
相关文章

相似问题

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