在msbuild中过滤项目的元数据

2024-04-07

我想使用修改后的元数据创建一个新的项目集合。 例如,更改 ClCompile.AdditionalIncludeDirectories 的分隔符。 为此,我首先从AdditionalIncludeDirectories 元数据创建一个项目集合,然后对其进行转换:

<ItemGroup>
  <IncludeDirs0 Include="%(ClCompile.AdditionalIncludeDirectories)">
    <key>@(ClCompile)</key>
  </IncludeDirs0>
</ItemGroup>

<ItemGroup>
  <IncludeDirs Include="@(IncludeDirs0 -> '-I %(Identity)', ' ')">
    <key>%(IncludeDirs0.key)</key>
  </IncludeDirs>
</ItemGroup>

<ItemGroup>
  <Compile Include="@(ClCompile)">
    <IncludeDirs>@(IncludeDirs)</IncludeDirs>
  </Compile>
</ItemGroup>

问题是如何过滤编译项组上的 IncludeDirs,以便每个编译项都有其正确的包含目录。 (这样 ClCompile 标识等于 IncludeDirs 键)。 我尝试添加一个条件,例如:Condition="'%(IncludeDirs.key)'=='%(ClCompile.Identity)'"但没有任何成功。
我可以直接使用 IncludeDirs:<Message Text="%(IncludeDirs.key) : @(IncludeDirs)"/>但我觉得这没有抓住要点,因为 Compile 集合应该包含所有元数据。

我在这里错过了什么?


您可以使用一个额外的目标来收集所需的物品。 看MSBuild批处理 http://msdn.microsoft.com/en-us/library/ms171473.aspx.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ClCompile Include="1" />
    <ClCompile Include="2">
      <AdditionalIncludeDirectories>2.1;2.2;2.3</AdditionalIncludeDirectories>
    </ClCompile>
  </ItemGroup>              

  <Target Name="TransformClCompile"
          Inputs="%(ClCompile.Identity)"
          Outputs="_Non_Existent_Item_To_Batch_">
    <PropertyGroup>
        <IncludeDirs>%(ClCompile.AdditionalIncludeDirectories)</IncludeDirs>
    </PropertyGroup>
    <ItemGroup>
          <IncludeDirs Include="$(IncludeDirs)" />
          <Compile Include="@(ClCompile)">
            <IncludeDirs>@(IncludeDirs ->'-I %(Identity)', ' ')</IncludeDirs>
          </Compile>
    </ItemGroup>                
  </Target>

  <Target Name="Build" DependsOnTargets="TransformClCompile">
     <Message Text="compile %(Compile.Identity) %(Compile.IncludeDirs)" />
  </Target>
</Project>

Output:

  compile 1 
  compile 2 -I 2.1 -I 2.2 -I 2.3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在msbuild中过滤项目的元数据 的相关文章

随机推荐

  • 使用 laravel 将 .JSON 文件保存到数据库

    总的来说 我对 Laravel 和 PHP 非常陌生 我所做的大部分工作都与在线教程相关 我知道如何将用户名或密码等单个项目保存到数据库中 但在存储整个文件时我一无所知 这就是我的数据库当前在迁移文件中的格式 public function
  • 合并两个 PDF

    import PyPDF2 import glob import os from fpdf import FPDF import shutil class MyPDF FPDF adding a footer containing the
  • 如何使用 PHP 在 S3 存储桶中创建文件夹

    我正在尝试在 S3 亚马逊存储桶中创建一个文件夹 但我发现很难找到正确的文档来充分解释所需内容 我有以下用于创建文件夹的代码 伪代码 任何人都可以解释或提供我需要在代码中放置的参数示例 use vendor aws S3 S3Client
  • 符号化 Swift Package Manager 构建

    Swift Package Manager可以是构建快速项目的便捷方法 并且 如果您 删除它添加到二进制文件中的绝对工具链 rpath https github com apple swift package manager blob 2d
  • cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 *.exe.stackdump

    我收到 cygwin exception open stackdumpfile 将堆栈跟踪转储到 TestProject exe stackdump 错误 我的项目只不过是一个 C HalloWorld 项目 其中包含一个附加类 我在其中设
  • Knockback.js 生产准备好了吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • UIButton 调整大小以适合其 titleLabel

    我有一个UIButton我将其添加到故事板中的视图控制器的视图中 我添加居中约束来定位它 并添加前导空间约束来限制其宽度 在代码中我添加 self button titleLabel numberOfLines 0 self button
  • 玩!框架+DynamoDB

    作为 Play 框架的新手 我想知道它是否比我想象的更容易 但是是否可以将 DynamoDB 与 Play 框架一起使用 由于 DynamoDB 是一个 NoSQL 数据库 我预计您需要使用特定的模块 而由于 Dynamo 最近才发布 因此
  • jQuery TABS 无法在新的 ASP .NET MVC4 项目下工作

    我所做的是 我已经创建了新的 ASP NET MVC4 项目 我用过http jqueryui com tabs http jqueryui com tabs 示例代码 所以我得到了这个 布局 cshtml Style
  • 在运行时获取本地对象/变量的列表

    我正在尝试创建一个简单的记录器来检查客户端发生的情况 如何获取本地列表 调试时在 Visual Studio 上显示 有点像当断点被击中时 对象 变量的当前现有实例显示在 本地 选项卡上 或者我应该在写入日志时获取变量的当前值吗 有趣的事情
  • 在 Windows 虚拟机中运行 Docker

    Using 适用于 Windows 10 的 Docker 桌面 MobaXterm 到 RDP 到 Windows 10 VM 硒 3 141 59 我目前正在尝试在 docker 容器中运行 selenium Grid 但遇到了一些问题
  • 如何在 jQuery 中设置文本框值?

    如何使用 jQuery 将某个值正确加载到文本框中 尝试了下面的 但我得到了 object Object 作为输出 请告诉我这一点 我是 jQuery 的新手 proc function x y var str1 pid value var
  • 使用整数作为模板参数时出现编译错误

    下面这段代码有什么问题 template
  • lxml 更改 Unicode 字符

    我正在使用 lxml 读取 xml 文件并更改一些详细信息 但是 运行时我发现即使我只是使用lxml读取文件然后再次写出来 如下所示 fil iTunes Music Library XML tre etree parse fil tre
  • Bootstrap 图标未显示在已发布的 ASP.NET MVC 应用程序中

    注意 请前往编辑 2 部分查看摘要 我有一个 ASP NET MVC 4 应用程序 我将 twitter Bootstrap 集成到其中 Bootstrap 工作正常 但当我发布应用程序时 图标无法正确显示 我尝试重新发布该应用程序 但没有
  • 在 XAML 中设置命令目标

    我很难理解 RoutedCommand 的 CommandTarget 属性 基本上 我有一些在用户控件 而不是窗口 中实现的静态命令 我在用户控件中创建命令绑定 如果我在用户控件中声明按钮 那么我就可以使用我的路由事件 但是 当按钮位于用
  • C++0x 右值引用和临时值

    我在 comp std c 上问了这个问题的变体 但没有得到答案 为什么调用f arg 在此代码中调用 const ref 重载f void f const std string less efficient void f std stri
  • 我不应该调用 HostingEnvironment.UnregisterObject 吗?

    在尝试在我的 ASP Net MVC 3 应用程序中通过 smtp 实现异步电子邮件时 我遇到了问题SO SmtpClient SendAsync 阻止我的 ASP NET MVC 请求 https stackoverflow com qu
  • 使用 dplyr 连接组内的所有行

    假设我有一个像这样的数据框 hand id card id card name card class A 1 p alpha A 2 q beta A 3 r theta B 2 q beta B 3 r theta B 4 s gamma
  • 在msbuild中过滤项目的元数据

    我想使用修改后的元数据创建一个新的项目集合 例如 更改 ClCompile AdditionalIncludeDirectories 的分隔符 为此 我首先从AdditionalIncludeDirectories 元数据创建一个项目集合