wake-up-neo.com

Erstellen Sie c # 6.0 auf TFS 2012

Wie kann ich eine Visual Studio 2015-Lösung mit C # 6.0-Features auf einem TFS 2012 erstellen, ohne Visual Studio 2015 auf einem Build-Agent zu installieren (mithilfe von Microsoft Build Tools 2015 RC)

Ich habe bereits MSBuild Tools installiert, bekomme aber immer noch Ausnahmen. Wie kann ich meiner Buildvorlage mitteilen, dass sie MSBuild 14 verwenden soll (nur für ein Projekt)

Und warum kompiliert mein TFS 2012 asynchron und wartet (c # 5.0) ohne Probleme auf, während BuildAgent nur Visual Studio 2012 installiert hat?

Ich habe versucht, den ToolPath meines BuildProcessTemplate in MSBuild/14.0/zu ändern, erhalte jedoch einen Build-Fehler: 

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.targets (316): "csc2.exe" wurde mit Code -532462766 beendet.

Beim Installieren der Microsoft.Net.Compilers 1.0.0-rc2-Compiler wird derselbe Fehler angezeigt.

Wenn ich das Projekt über die Befehlszeile kompiliere, erhalte ich exakt denselben Fehler/obwohl auf meiner Entwicklungsmaschine kein Fehler auftritt, wenn die Befehlszeile mit den gleichen Argumenten verwendet wird.

Dies ist die Ausnahme, die ich in der Kommandozeile bekomme:

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

Ich habe TFS2013 U5 verwendet, aber es wird dasselbe sein:

  • vS2015 RTM auf BuildServer-Maschine installiert 
  • setzen Sie dies in MSBuild-Argumente im Process-Teil von BuildTemplate

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

Sowohl der Kompilierungs- als auch der VS-Unit-Test laufen jetzt in Ordnung.

17
Jiří Zídek

Versuchen Sie es mit einem der beiden

/p:VisualStudioVersion=14.0

oder

/tv:14 

In Ihren Build-Argumenten

5
fenix2222

Die Antwort von Jiří Zídek ist richtig, aber es fehlt ein entscheidendes Detail. Ich musste folgende Schritte ausführen, damit TFS 2012 Update 2 funktioniert:

  1. installieren Sie Visual Studio 2015 auf dem Build-Server
  2. setzen Sie MSBuild Arguments in der Builddefinition auf /p:VisualStudioVersion=14.0 (d. h. Visual Studio 2015-Modus).
  3. installieren Sie in jedem Projekt, das die C # 6-Syntax verwendet, das NuGet-Paket Microsoft.Net.Compilersinstall-package Microsoft.Net.Compilers.

Es war Nummer 3, die den Unterschied für mich machte.

2
John Reilly

Für diejenigen, die TFS 2012 und VS 2017 verwenden, um 2015 zu umgehen, können Sie meine Antwort unter Linkbeschreibung hier eingeben eingeben.

TFS 2012 und VS 2017 Continuous Integration Build

0
gavin