如何从C#以编程方式使用带有MSBuild的SLN文件?

时间:2017-10-17 03:18:35

标签: c# visual-studio msbuild microsoft.build

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

1 个答案:

答案 0 :(得分:3)

经过多次搜索,我发现了它。由于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);