Microsoft.Build.Evaluation 的正确用法是什么?

2023-12-19

我想以编程方式将导入添加到 MSBuild 项目。这个APIMicrosoft.Build.Evaluation命名空间允许我这样做(我更愿意通过 VS 可扩展性 API 实现相同的结果,但似乎没有任何方法可以做到这一点,所以我求助于这个 API)。

如果我想在一种方法中打开一个或多个项目,查看它们的导入,有时添加导入,我应该如何使用ProjectCollection目的?我是否总是创建一个新的 ProjectCollection,将项目加载到其中,然后在方法结束时将它们全部卸载?

我有可以完成我想要的工作的代码,我只是无法猜测如何“正确”使用这个 API,因为只提供了通常的低级参考文档。


好吧,在没有任何关于如何使用此 API 的建议的情况下,我最终在任何想要使用项目对象的时候创建一个新的 ProjectCollection,然后在 ProjectCollection 上调用 UnloadAllProjects。

/// <summary>
///  Do something with a Microsoft.Build.Evaluation.Project.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="projectPath"></param>
/// <param name="worker"></param>
/// <returns></returns>
static T WithProject<T>(string projectPath, Func<Project, T> worker)
{
    var pc = new ProjectCollection();
    try
    {
        if (string.IsNullOrWhiteSpace(projectPath))
            return default(T);
        var evalProject = pc.LoadProject(projectPath);
        return worker(evalProject);
    }
    catch
    {
        return default(T);
    }
    finally
    {
        pc.UnloadAllProjects();
    }
}

或者,更简单(通过使用 ILSpy 窥探别人的 DLL):

public static Project GetMSBuildProject(string projectPath)
{
    Project project = null;
    if (project == null)
    {
        project = new Project(projectPath, new Dictionary<string, string>(), "12.0", new ProjectCollection());
    }
    return project;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Microsoft.Build.Evaluation 的正确用法是什么? 的相关文章

随机推荐

  • Backtrace 消音器不工作

    在我的 Rails 应用程序中 我设置了以下回溯消音器 正如 Michael Hartl 在他的 Rails 教程中所建议的那样 Rails backtrace cleaner add silencer line line rvm 但我仍然
  • 以编程方式激活 firebase 云函数中的重试

    我正在部署 firebase 云功能 以通过持续部署来监听我们的 firestore 中的更改 我只能想办法激活重试manually https firebase google com docs functions retries enab
  • 请求如何使用 TComplexMath 类的简单示例(包含源代码)

    我正在使用 Borland Delphi7 进行一些 Pascal 编程 我已经下载了一个相当基本 且免费 的复杂数学函数源代码库 但不幸的是它没有附带任何使用示例 由于我对 Pascal 中的类不是很熟悉 我想我只需要一个简单的例子来说明
  • jar 文件的 MacOS 可执行文件

    我有一个独立的 java 应用程序 将在 Macintosh 系统中使用 考虑到它的源代码可以反编译 我不想将该应用程序作为 jar 文件提供 因此 我的目的是将 jar 文件转换为某种可以在 MacOS 中运行的可执行文件 有什么办法可以
  • 如何在mysql中保存链接?

    我需要在mysql中保存一些链接 但有些链接较小 有些链接可能很大 我必须在 mysql 中使用什么字段 varchar TEXT ecc Varchar 是一个不错的选择 TEST适用于非常大的数据 并且存储在表外 欲了解更多信息 请阅读
  • bash 脚本中的通配符

    我有一个 bash 脚本来从 ftp 检索文件 现在 这些文件的文件名中有一部分是日期字符串 但也有未定义的数字 这些数字在每个文件上都会发生变化 我想根据日期下载文件 这是我的代码 我只需要使用通配符技巧 ftp 脚本就可以工作了 fil
  • 在本地运行一次计时器触发的 Azure 函数的最简单方法是什么?

    我有一些按计划运行的 C Azure 函数定时器触发器 https learn microsoft com en us azure azure functions functions bindings timer 我把它们设置成这样 在哪里
  • 将图像从 iPhone 上传到服务器文件夹

    我在网上找到了一些将图像从 iphone 上传到服务器文件夹的片段 它显示使用服务器端脚本 例如 在服务器端使用php
  • 如何在新的谷歌应用程序脚本界面上缩进代码?

    任何有关如何使用快捷方式在 google appscript 上缩进 打开自动缩进的指导将不胜感激 What I am using when indenting manually is Tab and Shift Tab on single
  • 如今,设置线程亲和性而不是将其留给操作系统的充分理由是什么?

    在这里搜索 线程亲和力 的答案 我看到很多人对此感兴趣 但除了可能获得稳定的 QueryPerformanceTimer 结果之外 没有什么理由 假设有一个现代操作系统和一个带有现代 4 6 核 CPU 的现代 2 4 插槽工作站 服务器类
  • ReflectionClass::getProperties() 是否也获取父级的属性?

    我正在尝试通过反射访问 更改类的父类的属性 如果我在子级上运行 ReflectionClass getProperties 它是否也会返回父级具有的任何属性 如果没有 是否有任何方法可以使用反射访问父属性 我做了这个快速测试 当您获取子类的
  • 获取隐式证据选择的运行时类型

    假设我有一组 String 转换器 作为 Type 类 import scala reflect runtime universe abstract class ToStringConverter T def convert value T
  • ClassNotFoundException 封送 EJB 参数

    我正在制作一个具有分布式架构的项目 但我在返回时遇到问题java util Collection到客户端应用程序 我正在托管 Bean 中调用 EJB 以引入持久实体的集合 我正在使用 Java 7 和 JBoss 7 1 1 Manage
  • 将域名指向运行XAMPP和wordpress的服务器ip

    我在 Windows 服务器上安装了 XAMPP 还安装了 Wordpress XAMPP 模块 我还购买了一个域名 将其指向我的服务器 IP 问题是 我希望当人们输入 mydomain com 时 mydomain com 显示在地址栏中
  • Spring Data Elasticsearch 父/子文档存储库/测试执行错误

    我为两个父 子相关文档创建了两个 Spring Data elasticsearch 存储库 您可以看到它们的文档类here https github com ltsallas spring data elastic test blob m
  • 是否可以在不终止会话的情况下终止oracle中的单个查询?

    我希望能够在 Oracle 10 2 0 4 中终止用户的查询 而不终止其整个会话 这将允许查询结束 但不会将该用户从会话中注销 以便他们可以继续进行其他查询 这有可能吗 或者终止会话的钝锤是结束查询执行的唯一方法吗 我发现了一个窍门 我不
  • AWS Cloudfront:凭证的范围应限定在有效区域

    通过 API 连接到 AWS CloudFront 时 无论我做什么 都会出现异常 Credential should be scoped to a valid region 相同的凭据适用于帐户有权执行的任何其他请求 例如 S3 该异常是
  • 使用 EntityFramework 4 为实体分配 id

    我想为我的实体实现 默认 ID 生成支持 保存实体时 我希望 EntityFramework 仅生成实体的 id 值 如果尚未设置 如果 ID 已经具有非空 非零值 我希望在将实体保存到数据库中时保留该实体 ID 我正在将数据从旧数据模型
  • phpcs:如何修改 PSR2 以检查大括号与方法在同一行?

    我现在花了 2 个多小时试图弄清楚如何要求 与方法声明在同一行 而不是默认要求在下一行 我怎样才能完成这件事 我已将 PSR2 标准复制到名为 PSR2 的新文件夹中 以便能够根据自己的喜好对其进行修改 所以我正在研究的基础基本上是我想要修
  • Microsoft.Build.Evaluation 的正确用法是什么?

    我想以编程方式将导入添加到 MSBuild 项目 这个APIMicrosoft Build Evaluation命名空间允许我这样做 我更愿意通过 VS 可扩展性 API 实现相同的结果 但似乎没有任何方法可以做到这一点 所以我求助于这个