gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:37:20 24 4
gpt4 key购买 nike

我想以编程方式将导入添加到 MSBuild 项目。这个 Microsoft.Build.Evaluation 命名空间中的 API 允许我做到这一点(我更愿意通过 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;
}

关于msbuild - Microsoft.Build.Evaluation 的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24140413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com