У меня есть целевой проект, который использует C# 6.0 Мне нужно его программно построить.Microsoft.Build.Framework указать инструменты version
У меня есть код ниже:
var pc = new ProjectCollection();
pc.DefaultToolsVersion = "14.0" //set tools version
var globalProperty = new Dictionary<string, string>
{
{"Configuration", "Release"},
{"Platform", "Any CPU"},
{"OutputPath", Utils.GetGaugeBinDir()}
};
var buildRequestData = new BuildRequestData(solutionFullPath, globalProperty, "14.0", new[] {"Build"}, null); //Set tools version here as well
var errorCodeAggregator = new ErrorCodeAggregator();
var buildParameters = new BuildParameters(pc) {Loggers = new ILogger[] {consoleLogger, errorCodeAggregator}};
var buildResult = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequestData);
Независимо от того, где я установил версию инструментов (из двух вариантов выше), не построить C# 6.0.
В командной строке, я могу это сделать:
msbuild foo.csproj /tv:14.0 /t:rebuild
Я призываю это из MSBuild 12.0 каталога BIN, и она работает. Если я опустил флаг /tv:14.0
, он не сработает, как ожидалось.
Итак, вопрос в том, что является программным способом указать /tv
флаг на BuildManager
?
Я борюсь с той же проблемой. Вы выяснили решение? В настоящее время файл журнала из моей сборки предполагает, что он не может построить синтаксис C# 6.0. Я устанавливаю как DefaultToolsVersion экземпляра ProjectCollection, так и параметр BuildRequestData как 14.0. Ясно, что это неправильно (или недостаточно). –
@ AlexanderHøst - Боюсь, нет. У меня есть два пути для исправления этого: (1) обновить мой код для использования MSBuild 14.0 или (2) вызвать процесс msbuild и передать соответствующие параметры. Мне тоже не нравится, поэтому оставляю его так, как сейчас :( –