Wie aktualisiere ich msbuild auf C # 6?

106

Ich möchte C # 6 in meinem Projekt verwenden (Null-Weitergabe, andere Funktionen).

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

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

Wenn ich mein Projekt jedoch in das Repo schiebe und CI mit dem Erstellen beginnt, schlägt die Erstellung fehl, da es nicht unterstützt wird ?.

Ich habe VS2015 auch auf dem CI-Server installiert, sehe aber so aus, als würde es nicht verwendet. Was kann ich tun?

CI - CruiseControl .NET Builds with C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

Anna Prosvetova
quelle
3
Für jeden Download MS Build - Werkzeuge 2015 aus den unten angegebenen Links, sie sind für eine alte (Pre-Update) Version , die Fehler hat ... ich einen Link gefunden hier bis 2015 Update 3
bdrajer

Antworten:

164

Stellen Sie sicher, dass Sie anrufen:

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

Dies ist die Version von MsBuild, die im Lieferumfang von Visual Studio 2015 enthalten ist und den C # -Compiler aufruft, der dies versteht. Sie können diese Version von MsBuild auf Ihrem System herunterladen, indem Sie eine beliebige Edition von Visual Studio 2015 oder die eigenständigen Microsoft Build Tools 2015 installieren .

Durch Hinzufügen eines Verweises auf das folgende NuGet-Paket wird auch die Verwendung des neuen Compilers erzwungen:

Install-Package Microsoft.Net.Compilers

Bitte beachten Sie, dass Install-Package die neueste verfügbare Version auswählt, die möglicherweise nicht die gesuchte ist. Überprüfen Sie vor der Installation die Versionshinweise und Abhängigkeiten, um das zugrunde liegende Problem mit der behandelten Version zu beheben. In diesem Fall war dies spezifischer für VS 2015.

Also für Visual Studio 2015:

Install-Package Microsoft.Net.Compilers -Version 1.0.0
jessehouwing
quelle
2
Gibt es Bedenken, dass dies seit dem RyuJIT Fehler verursacht oder was auch immer so viele Fehler hat?
Maslow
3
Nur ein Hinweis dazu: Wenn Sie Ihre PATH env-Variable aktualisieren, müssen Sie den alten Speicherort entfernen (z. B. C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319), da dies beim Ausführen von "msbuild" möglicherweise immer noch aufgerufen wird "von cmd
TheWebGuy
2
Ich musste auch das Nuget-Paket Microsoft.Net.Compilers installieren: siehe stackoverflow.com/a/36774876/584714
DrGriff
2
Gibt es eine Lösung dafür, ohne dass in jedem Projekt ein Nuget-Paket installiert werden muss? Ich habe Hunderte von Projekten, die dies benötigen würden, und es scheint mir unnötig. Scheint irgendwo wie ein Käfer.
Cole W
2
Hat jemand eine Antwort auf die @ ColeW-Frage?
Zinov
61

Sie können übrigens auch die "Microsoft Build Tools 2015" anstelle von VS2015 auf Ihrem Build-Server installieren.

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

MSBuild wird unter demselben Pfad installiert:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe
MuhKuh
quelle
IMHO gibt es einen Grund, warum sich die Frage auf diese Umgebung bezieht. Machen Sie lieber einen Kommentar zu der Frage.
Jogo
24
Da der Stapelüberlauf es mir nicht erlaubt, Fragen zu kommentieren, habe ich ihn nur so veröffentlicht, wie es das System zulässt. 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
richtige
Nach der Installation von "Microsoft Build Tools 2015" (oder "Microsoft Build Tools 2017") haben Sie auch die Kontrolle darüber, welche Version von Visual Studio Sie zum Erstellen der Lösung verwenden möchten: MSBuild.exe / t: Build YourSolution.sln / p : VisualStudioVersion = 14.0 [setzen Sie es auf 10.0 für VS2010, auf 14.0 für VS2015 und 15.0 für VS2017]
Alex Sanséau
Um Microsoft Build Tools 2015 Update 3 herunterzuladen und zu installieren , besuchen Sie ältere VS-Downloads und gehen Sie zum Redistributables and Build ToolsAbschnitt.
RBT
12

Sie haben wahrscheinlich bereits diese Funktion, aber dies könnte in Zukunft jemand anderem helfen. Ich bin kürzlich auf diese Frage gestoßen, die mich in die richtige Richtung bewegt und letztendlich zu einer Lösung geführt hat.

Eine andere mögliche Lösung hierfür ist das manuelle Aktualisieren Ihrer Projektdateien, um auf die MSBuild-Version abzuzielen, mit der Ihre Projekte erstellt werden sollen.

Ich habe kürzlich ein TeamCity-Buildserver-Update durchlaufen und die Microsoft Build Tools 2015 bereits darauf installiert. Ich dachte, ich hätte alles auf dem Build-Server installiert, meine Lösung zielte auf C # 6.0 ab und ich hatte jedes Projekt auf .net 4.6.1 ausgerichtet. Wie Sie hat alles mit C # 6.0-spezifischem Code in meiner lokalen Umgebung gut funktioniert, aber mein TeamCity-Build-Server mochte nichts davon.

Wie von anderen erwähnt, habe ich versucht, das NuGet-Paket Microsoft.Net.Compilers zu verwenden. Die neueste Version erlaubte es dem Build, auf meinem Build-Server zu funktionieren, aber ich konnte meinen Code nicht lokal veröffentlichen (eine Anforderung von mir). Frühere Versionen dieses NuGet-Pakets ließen mich veröffentlichen, aber der Build würde nicht funktionieren.

Ich musste letztendlich jede Projektdatei in meiner Lösung so ändern, dass sie speziell auf die MSBuild-Version abzielt, die C # 6.0-Code verarbeiten kann. In jeder meiner Projektdateien habe ich eine Zeile gefunden, die der folgenden Zeile ähnelt:

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

Die Schlüsselkomponente dieser Zeile ist der ToolsVersion- Teil davon. Ich habe diese Zeile in meinen Projektdateien einfach geändert, um Folgendes zu lesen:

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

Der Unterschied bestand darin, dass ich auf Version 14 und nicht auf 4 abzielte. Version 14.0 entspricht Build Tools 2015. Durch Ändern dieser Option verwendete mein TeamCity-Buildserver die richtige MSBuild-Version und konnte meinen C # 6.0-Code erstellen.

Ich musste auch den TargetFrameworkVersion-XML-Knoten manuell aktualisieren, um 4.6.1 zu verwenden, da 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 denke ich, dass die Versionsnummern ungefähr so ​​lauten:

4,0 = VS2012

12,0 = VS2013

14,0 = VS2015

15,0 = VS2017

Ich glaube, wenn Sie .net 4.7 verwenden möchten, müssen Sie die Build Tools 2017 installiert haben und Ihre Projekte auf 15.0 anstatt auf 14.0 ausrichten, aber ich habe dies nicht überprüft.

user1059903
quelle