如何从 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);
我正在尝试使用较新的 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);