web-dev-qa-db-fra.com

Construire c # 6.0 sur TFS 2012

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)
22
Console

J'ai utilisé TFS2013 U5, mais ce sera pareil:

  • vS2015 installé RTM sur la machine BuildServer 
  • mettre cela dans les arguments MSBuild dans la partie processus de BuildTemplate

/tv:14.0 /p:GenerateBuildInfoConfigFile=false /p:VisualStudioVersion=14.0

La compilation et les tests de l’unité logique fonctionnent maintenant correctement.

17
Jiří Zídek

Essayez d'utiliser soit

/p:VisualStudioVersion=14.0

ou

/tv:14 

Dans vos arguments de construction

5
fenix2222

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:

  1. installer Visual Studio 2015 sur le serveur de génération
  2. définir le MSBuild Arguments dans la définition de construction sur /p:VisualStudioVersion=14.0 (c.-à-d. le mode Visual Studio 2015)
  3. dans chaque projet utilisant la syntaxe C # 6, installez le package NuGet Microsoft.Net.Compilersinstall-package Microsoft.Net.Compilers

C'est la 3e qui a fait la différence pour moi.

2
John Reilly

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

TFS 2012 et VS 2017 build d'intégration continue

0
gavin