如何从 C# 以编程方式将 SLN 文件与 MSBuild 一起使用?

How can I use an SLN file with MSBuild programmatically from C#?

我正在尝试使用较新的 Microsoft.Build.Evaluation API 在 C# 中创建自定义 MSBuild 脚本。我遇到的问题是这个较新的 API 不支持 .sln 文件。旧的弃用 Microsoft.Build.Engine API 确实支持 .sln 文件,但我想使用较新的,因为 1) 它没有被弃用,并且 2) 似乎有更多的在线文档和用法参考。我已经看到 MSBuild 可以在成功编译解决方案时创建一个 .metaproj 文件,当在 CMD 中进行此分配时:set MSBuildEmitSolution=1。我首先需要 .metaproj 文件才能编译解决方案。 API 中有什么可以将 .sln 转换为 .metaproj 的吗?有没有用于解析 .sln 文件的库?

经过多方查找,我明白了。由于 MSBuild API 的两个不同版本以及仅 运行 来自命令行的 MSBuild 的流行,在线查找好的示例有点困难。

这是我现在可以使用的代码,使用较新的 MSBuild API:

var pc = new ProjectCollection();

var parameters = new BuildParameters(pc)
{
    Loggers = new[] { _logger } //Instance of ILogger instantiated earlier
};

var request = new BuildRequestData(
    projectFullPath: pathToMySlnFile, //Solution file path
    globalProperties: myPropertyDictionary,
    toolsVersion: null,
    targetsToBuild: myTargetsArray,
    hostServices: null,
    flags: BuildRequestDataFlags.ProvideProjectStateAfterBuild);

var buildResult = BuildManager.DefaultBuildManager.Build(parameters, request);