Comment créer une solution Visual Studio 2015 à l'aide de fonctionnalités C # 6.0 sur un système TFS 2012 sans installer Visual Studio 2015 sur un agent de génération (à l'aide de Microsoft Build Tools 2015 RC)
J'ai déjà installé MSBuild Tools mais j'obtiens toujours des exceptions. Comment puis-je dire à mon modèle de construction d'utiliser MSBuild 14 (pour un seul projet)
Et pourquoi mon TFS 2012 est-il compilé de manière asynchrone et attend-il (c # 5.0) sans problème alors que BuildAgent n’a que Visual Studio 2012 installé?
J'ai essayé de changer le ToolPath de mon BuildProcessTemplate en MSBuild/14.0/mais j'obtiens une erreur de construction:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.targets (316): "csc2.exe" quitté avec le code -532462766.
L'installation des compilateurs Microsoft.Net.Compilers 1.0.0-rc2 génère la même erreur.
Si je compile le projet en utilisant la ligne de commande, j'obtiens exactement la même erreur/bien qu'il n'y ait pas d'erreur sur ma machine de développement lorsque j'utilise la ligne de commande avec les mêmes arguments.
C'est l'exception que je reçois dans la ligne de commande:
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)
J'ai utilisé TFS2013 U5, mais ce sera pareil:
/tv:14.0 /p:GenerateBuildInfoConfigFile=false /p:VisualStudioVersion=14.0
La compilation et les tests de l’unité logique fonctionnent maintenant correctement.
Essayez d'utiliser soit
/p:VisualStudioVersion=14.0
ou
/tv:14
Dans vos arguments de construction
La réponse de Jiří Zídek est correcte mais il manquait un détail crucial. Je devais faire ce qui suit pour que les choses fonctionnent sur TFS 2012 Update 2:
MSBuild Arguments
dans la définition de construction sur /p:VisualStudioVersion=14.0
(c.-à-d. le mode Visual Studio 2015)install-package Microsoft.Net.Compilers
C'est la 3e qui a fait la différence pour moi.
Pour ceux d'entre vous qui utilisent TFS 2012 et VS 2017 en contournant 2015, vous pouvez suivre ma réponse sur entrez la description du lien ici