2015-08-14 10 views
87

Ich möchte C# 6 in meinem Projekt (Null-Propagation, andere Funktionen) verwenden.Wie msbuild zu C# 6 zu aktualisieren?

Ich habe VS 2015 auf meinem PC installiert und es funktioniert hervorragend und baut Testcode wie

var user = new SingleUserModel(); //all model fields are null 
var test = user.User?.Avatar?["blah"]; 

Aber wenn ich mein Projekt in den Repo schieben und CI beginnt es zu bauen, bauen schlägt fehl, weil der nicht unterstützten ?.

Ich habe VS2015 auf CI-Server zu installiert, aber looke, wie es es nicht verwendet. Was kann ich tun?

CI - CruiseControl- .NET Baut mit C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

+1

Für jeden, der MS Build Tools 2015 von den unten angegebenen Links herunterlädt, sind sie für eine alte (vor dem Update) Version, die Bugs hat ... Ich habe einen Link gefunden [https://github.com/Microsoft/msbuild/issues/480 # issuecomment-243679112) bis 2015 Update 3. – bdrajer

Antwort

142

Stellen Sie sicher, Sie rufen:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe 

, dass die Version von MsBuild ist, das zu Visual Studio 2015 und ruft die C# Compiler, der dies versteht. Sie können diese Version von MsBuild auf Ihrem System erhalten, indem Sie eine beliebige Edition von Visual Studio 2015 installieren oder das Standalone-Programm Microsoft Build Tools 2015 installieren.

einen Verweis auf die following NuGet package Hinzufügen von dort auch den neuen Compiler zwingen:

Install-Package Microsoft.Net.Compilers 
+1

gibt es irgendwelche Bedenken wegen dieser Bugs seit dem RyuJIT oder was auch immer so viele Bugs haben? – Maslow

+0

Der Compiler und das JIT sind 2 getrennte Dinge. Zur Kompilation macht es also keinen Unterschied. – jessehouwing

+0

Sehr hilfreich, danke! –

52

Sie können durch die Art und Weise installieren auch die anstelle von VS2015 auf dem Build-Server „Microsoft-Tools 2015 Build“.

https://www.microsoft.com/en-us/download/details.aspx?id=48159

Es installiert MSBuild auf den gleichen Pfad:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe 
+0

IMHO gibt es eine Ursache, warum die Frage bezieht sich auf diese Umgebung. Beantworten Sie die Frage lieber. – jogo

+18

Da stackoverflow es mir nicht erlaubt, Fragen zu kommentieren, habe ich es nur so geschrieben, wie es mir die Systeme erlauben. Und wenn Sie es nicht nützlich finden, ignorieren Sie es einfach.Für mich bei der Suche nach der Lösung auf meinem Build-Server war dies der Weg zu gehen, anstatt zu installieren VS2015 – MuhKuh

+0

Sobald Sie "Microsoft Build Tools 2015" (oder "Microsoft Build Tools 2017") installiert haben Sie auch die Kontrolle über welche Version von Visual Studio, das Sie zum Erstellen der Lösung verwenden möchten: MSBuild.exe/t: Erstellen Sie YourSolution.sln /p:VisualStudioVersion=14.0 [setzen Sie es auf 10.0 für VS2010, auf 14.0 für VS2015 und auf 15.0 für VS2017] –

0

Sie haben wahrscheinlich schon diese Arbeit haben, aber dies könnte jemand anderes in der Zukunft helfen. Ich bin in letzter Zeit auf diese Frage gestoßen und es hat mich in die richtige Richtung geführt und letztendlich zu einer Lösung geführt.

Eine andere mögliche Lösung besteht darin, Ihre Projektdateien manuell zu aktualisieren, um die MSBuild-Version anzusprechen, mit der Ihre Projekte erstellt werden sollen.

Ich habe kürzlich ein TeamCity Build Server Update durchgeführt und ich habe bereits die Microsoft Build Tools 2015 installiert. Ich dachte, ich hätte alles auf dem Build-Server, ich hatte meine Lösung für C# 6.0, und ich hatte jedes Projekt, das auf .net 4.6.1 abzielte. Wie Sie, alles mit C# 6.0-spezifischen Code in meiner lokalen Umgebung gut gebaut, aber mein TeamCity Build-Server mochte nichts davon.

Wie bereits erwähnt, habe ich versucht, das Microsoft.Net.Compilers NuGet-Paket zu verwenden. Mit der neuesten Version konnte der Build auf meinem Build-Server ausgeführt werden, aber ich konnte meinen Code nicht lokal veröffentlichen (eine Anforderung von mir). Frühere Versionen dieses NuGet-Pakets würden mich veröffentlichen lassen, aber der Build würde nicht funktionieren.

Was ich fand, dass ich tun musste, war letztlich jede Projektdatei in meiner Lösung zu ändern, um speziell auf die MSBuild-Version zu zielen, die C# 6.0-Code verarbeiten konnte.In jedem meiner Projektdateien, fand ich eine Zeile wie die folgende Zeile ein:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

mit dem Schlüsselkomponente dieser Linie ist der Toolsversion Teil davon. Ich habe einfach diese Zeile auf meine Projektdateien geändert folgendes zu lesen:

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

Der Unterschied war, dass ich Version 14 wurde Targeting, nicht 4. Version 14.0 mit Erstellen Sie dieses Werkzeug 2015. Durch die Änderung, mein Teamcity Build entspricht Server verwendete die richtige MSBuild-Version und konnte meinen C# 6.0-Code erstellen.

Ich musste auch den Xml-Knoten TargetFrameworkVersion manuell aktualisieren, um 4.6.1 zu verwenden, weil VS2015 etwas nicht richtig gemacht und meinen lokalen Build durcheinander gebracht hat, aber das ist hier nicht relevant.

Bitte, jemand korrigiert mich wenn ich falsch liege, aber nur als Referenz, ich glaube, die Versionsnummern etwas so gehen:

4.0 = VS2012

12,0 = VS2013

14,0 = VS2015

15,0 = VS2017

ich glaube, wenn Sie .net 4.7 verwenden wollte, dann würden Sie die Build-Werkzeuge 2017 installiert und h haben müssen Stellen Sie sicher, dass Ihre Projekte auf 15.0 statt auf 14.0 ausgerichtet sind, aber ich habe dies nicht überprüft.

Verwandte Themen