BuildManager для использования другой версии MSBuild

Следующий код пытается построить Решение программно, используя BuildManager:

ProjectCollection pc = new ProjectCollection();
pc.DefaultToolsVersion = "12.0";
pc.Loggers.Add(fileLogger);
Dictionary<string, string> globalProperty = new Dictionary<string, string>();
BuildRequestData buildRequest = new BuildRequestData(solutionName, globalProperty, null, new[] { "Build" }, null);

BuildParameters buildParameters = new BuildParameters(pc)
{
    DefaultToolsVersion = "12.0",
    OnlyLogCriticalEvents = false,
    DetailedSummary = true,
    Loggers = new List<Microsoft.Build.Framework.ILogger> { fileLogger }.AsEnumerable()
};

var result = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest);

Когда я запускаю этот код (кстати, он ничего не собирает), я вижу, что следующий компилятор csc.exe используется, в дополнение к одной конкретной версии winmdexp.exe:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Csc.exe
ExportWindowsMDFile:
    C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\winmdexp.exe 

Но когда я успешно строю решение с использованием VS IDE, появляется следующая информация:

C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe
ExportWindowsMDFile:
    C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\winmdexp.exe

Почему это происходит в моем коде и как я могу это изменить?

1 ответ

Решение

Начиная с Visual Studio 2013, MSBuild больше не является компонентом.NET Framework. Это означало некоторую реструктуризацию упаковки и развертывания. Старая платформа MSBuild все еще находится в папках.NET Framework. Однако при установке Visual Studio 2013 средства Microsoft Build Tools 12.0 также устанавливаются в C:\Program Files (x86)\MSBuild\12.0. Обратите внимание, что инструменты сборки доступны отдельно от Visual Studio здесь.

Я столкнулся с той же ситуацией, что и вы, когда впервые попробовал это. Проблема в том, что вы, вероятно, ссылались на старые сборки "4.0" MSBuild Framework. Вам нужно сослаться на новые сборки 12.0, расположенные в C:\Program Files (x86)\MSBuild\12.0\bin (вам нужно будет просмотреть там в VS, чтобы добавить ссылки). Вероятно, вам нужны Microsoft.Build, Microsoft.Build.Engine и Microsoft.Build.Framework. Как только я обновил эти ссылки, я увидел, что он использует те же инструменты, что и VS 2013 при сборке.

Другие вопросы по тегам