webentwicklung-frage-antwort-db.com.de

Wie aktualisiere ich msbuild auf C # 6?

Ich möchte C # 6 in meinem Projekt verwenden (keine 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"];

Aber wenn ich mein Projekt auf das Repo pushe und CI damit beginnt, es zu erstellen, schlägt die Erstellung fehl, weil ? Nicht unterstützt wird.

Ich habe VS2015 auch auf dem CI-Server installiert, aber anscheinend wird es nicht verwendet. Was kann ich tun?

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

103
Anna Prosvetova

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 installieren, indem Sie eine beliebige Edition von Visual Studio 2015 oder das eigenständige Microsoft Build Tools 2015 installieren.

Durch Hinzufügen eines Verweises auf folgendes 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 von Ihnen gesuchte ist. Überprüfen Sie vor der Installation die Versionshinweise und Abhängigkeiten, um das zugrunde liegende Problem mit der behandelten Version zu beheben, die in diesem Fall spezifischer für VS 2015 war.

Also für Visual Studio 2015:

Install-Package Microsoft.Net.Compilers -Version 1.0.0
162
jessehouwing

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

Es installiert MSBuild auf demselben Pfad:

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

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

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

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

Wie bereits von anderen erwähnt, habe ich versucht, das NuGet-Paket von Microsoft.Net.Compilers zu verwenden. Mit der neuesten Version konnte der Build auf meinem Buildserver ausgeführt werden, aber ich konnte meinen Code nicht lokal veröffentlichen (eine meiner Anforderungen). Frühere Versionen dieses NuGet-Pakets ließen mich veröffentlichen, aber der Build funktionierte nicht.

Als letztes musste ich jede Projektdatei in meiner Projektmappe 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 ähnlich der folgenden gefunden:

<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 einfach diese Zeile in meinen Projektdateien 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 Version 4 abzielte. Version 14.0 entspricht Build Tools 2015. Als ich dies änderte, 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 hat und mein lokales Build durcheinander gebracht hat, aber das ist hier nicht relevant.

Bitte korrigiert mich jemand, 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 wollten, müssten 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.

9
user1059903