Сборка С# 6.0 на TFS 2012
Как я могу построить решение Visual Studio 2015 с использованием функций С# 6.0 на TFS 2012 без установки Visual Studio 2015 на агенте сборки (используя Microsoft Build Tools 2015 RC).
Я уже установил MSBuild Tools, но у меня все еще есть исключения. Как я могу указать шаблон моей сборки для использования MSBuild 14 (Только для одного проекта)
И почему мой TFS 2012 компилирует async и ждет (С# 5.0) без каких-либо проблем, в то время как BuildAgent только установил Visual Studio 2012?
Я попытался изменить ToolPath моего BuildProcessTemplate на MSBuild/14.0/, но я получаю ошибку сборки:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.targets(316): "csc2.exe" вышел с кодом -532462766.
Установка компилятора Microsoft.Net.Compilers 1.0.0-rc2 дает ту же ошибку.
Если я скомпилирую проект с помощью командной строки, я получаю ту же ошибку/хотя на моей машине dev нет ошибки при использовании командной строки с теми же аргументами.
Это Исключение, которое я получаю в командной строке:
C:\Program Files (x86)\MSBuild\14.0\bin\csc2.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentro.....
Unhandled Exception: System.InvalidProgramException: Common Language Runtime detected an invalid program.
at System.Collections.Immutable.SecurePooledObject`1.Use[TCaller](TCaller& caller)
at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator.PushLeft(SortedInt32KeyNode`1 node)
at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator..ctor(SortedInt32KeyNode`1 root)
at System.Collections.Immutable.ImmutableDictionary`2.Enumerator..ctor(SortedInt32KeyNode`1 root, Builder builder)
at Microsoft.CodeAnalysis.RuleSet.GetDiagnosticOptionsFromRulesetFile(Dictionary`2 diagnosticOptions, String resolvedPath, IList`1 diagnosticsOpt, CommonMessageProvider messageProviderOpt)
at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.Parse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths)
at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.CommonParse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths)
at Microsoft.CodeAnalysis.CommonCompiler..ctor(CommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths)
at Microsoft.CodeAnalysis.CSharp.CSharpCompiler..ctor(CSharpCommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths)
at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc..ctor(String responseFile, String baseDirectory, String[] args)
at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.Run(String[] args)
at Microsoft.CodeAnalysis.BuildTasks.BuildClient.RunWithConsoleOutput(String[] args, RequestLanguage language, Func`2 fallbackCompiler)
at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args)
at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc2.Main(String[] args)
Ответы
Ответ 1
Я использовал TFS2013 U5, но он будет таким же:
- установлен RTM VS2015 на машине BuildServer.
- поместите это в аргументы MSBuild в Process part of BuildTemplate
/tv:14.0/p: GenerateBuildInfoConfigFile = false /p:VisualStudioVersion=14.0
Оба теста компиляции и VS-модуля теперь работают нормально.
Ответ 2
Попробуйте использовать
/p:VisualStudioVersion=14.0
или
/tv:14
В ваших аргументах построения
Ответ 3
Ответ Йиржи Зидека верен, но ему не хватает одной важной детали. Я должен был сделать следующее, чтобы найти работу в TFS 2012 Update 2:
- установить Visual Studio 2015 на сервер сборки
- установите
MSBuild Arguments
в определении сборки /p:VisualStudioVersion=14.0
(то есть режим Visual Studio 2015)
- в каждом проекте, использующем синтаксис С# 6, установите пакет NuGet Microsoft.Net.Compilers
install-package Microsoft.Net.Compilers
Это было для меня 3-е место.
Ответ 4
Для тех из вас, кто использует TFS 2012 и VS 2017 в обход 2015 года, вы можете следовать моему ответу на введите описание ссылки здесь
Планирование непрерывной интеграции TFS 2012 и VS 2017