Как я могу использовать файл SLN с MSBuild программно из C#?

Я пытаюсь создать собственный скрипт MSBuild в C#, используя более новую Microsoft.Build.Evaluation API. У меня проблема в том, что этот новый API не поддерживает .sln файлы. Старшее устарело Microsoft.Build.Engine API поддерживает .sln файлы, но я хотел бы использовать более новый, потому что 1) он не устарел и 2) кажется, что есть больше онлайн-документации и использования для ссылки. Я видел, что MSBuild может создать .metaproj Когда файл успешно компилирует решение, когда это назначение выполняется в CMD: set MSBuildEmitSolution=1, мне нужно .metaproj файл, чтобы иметь возможность скомпилировать решение в первую очередь. Есть ли что-нибудь в API для конвертации .sln в .metaproj? Есть ли какая-нибудь библиотека для разбора .sln файлы?

1 ответ

Решение

Я понял это после дополнительных поисков. Найти хорошие примеры в Интернете немного сложно из-за двух разных версий MSBuild API и популярности простого запуска MSBuild из командной строки.

Вот код, который теперь работает для меня, используя более новый API MSBuild:

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);
Другие вопросы по тегам