我想以编程方式将导入添加到 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(使用前将#替换为@)