Was ist der Zweck von Microsoft.Net.Compilers?

82

Welche Bedeutung hat dieser Compiler? Ist es ein Muss oder könnte man darauf verzichten? Was ist der Zweck eines anderen Compilers oder ist es nur ein futuristisches Projekt? Ein kurzer Überblick wäre willkommen.

nützlichBee
quelle
2
Es ist auch eine Abhängigkeit von Microsoft.CodeDom.Providers.DotNetCompilerPlatformin v1.0.8 und darunter, so dass Sie es möglicherweise aus diesem Grund sehen
KyleMit
1
Laut Microsoft , Microsoft.Net.Compilersist für veraltet Microsoft.Net.Compilers.Toolset.
Uwe Keim

Antworten:

94

Der Sinn des Microsoft.Net.Compilers-Pakets besteht darin, dass die mit diesem Paket verteilten Compiler zum Kompilieren Ihres Projekts verwendet werden und nicht der Compiler, der mit .NET Framework oder Visual Studio geliefert wird. Der praktischste direkte Vorteil besteht darin, dass Ihre Projekte C # 6-Funktionen verwenden können und diese Projekte dann auf einem System erstellt werden können, auf dem kein C # 6-Compiler installiert ist, z. B. auf einem Server für kontinuierliche Integration, auf dem Sie keine Funktionen haben. Ich möchte nicht das vollständige Visual Studio 2015 installieren.


quelle
Ich muss eine sehr einfache Sache tun, nämlich eine .cs-Datei zu kompilieren und il auszugeben. Keine Notwendigkeit, externe Referenzen usw. zu validieren. Ist dies mit Microsoft.Net.Compilers möglich?
Bandara
@Bandara Es ist nicht möglich, C # ohne externe Referenzen mit oder ohne Microsoft.Net.Compilers zu kompilieren. Referenzierte Baugruppen werden beispielsweise für die Überlastungsauflösung benötigt. Und wenn Sie die externen Referenzen haben, ist dies mit Microsoft.Net.Compilers technisch möglich, aber es ist wirklich das falsche Tool für den Job. Sie würden einen externen Prozess starten, wenn derselbe Compiler bereits in anderen Paketen verfügbar ist, sodass Sie Ihr eigenes Programm direkt aufrufen können.
Siehe die aktualisierte Antwort von @JaredPar (MS), diese Antwort ist nicht mehr gültig. Ich denke, wir sollten unsere Lösungen überprüfen und die alten Pakete entfernen, um sie mit einem aktuellen VS / VSCode / SDK-Toolset zu erstellen.
Tony Wall
15

Derzeit haben Microsoft.Net.Compiler keinen Zweck. Dies ist ein NuGet-Paket, das veraltet ist und nach Visual Studio 16.5 nicht mehr produziert wird. Es gibt ein Nachfolgepaket mit dem Namen Microsoft.Net.Compilers.Toolset. Dieses Paket hat fast die gleiche Funktionalität wie Microsoft.Net.Compiler, funktioniert jedoch sowohl mit .NET Desktop- als auch mit .NET Core MSBuild-Instanzen.

Trotzdem ist Microsoft.Net.Compilers.Toolset nicht für den allgemeinen Gebrauch gedacht. Dieses Paket dient zwei spezifischen Verwendungszwecken:

  1. Dient als kurzfristiges Mittel zum Entsperren von Kunden, die auf abstürzende Fehler im Compiler gestoßen sind. Für solche Kunden können wir dieses Paket verwenden, um ihre Szenarien etwa eine Stunde nach dem Zusammenführen des Fixes im Roslyn-Repository zu entsperren. Dies dient als Brücke, bis der Fix in die zugehörige Visual Studio- oder .NET SDK-Wartungsversion gelangt. In diesem Fall wird der Kunde aufgefordert, das Paket aus seiner Lösung zu entfernen und sich auf die offiziell freigegebenen Toolsets zu verlassen.
  2. Dient als Mechanismus zum Verschieben von Binärdateien zwischen Roslyn und den offiziellen Builds des .NET SDk.

Dieses Paket ist nicht für den allgemeinen langfristigen Verbrauch durch Kunden für ihren Bau gedacht. Ich verstehe, dass einige Kunden sich dafür entscheiden, aber eine solche Verwendung wird auch nicht unterstützt. Das Paket kann und wird regelmäßig Unterbrechungen verursachen, indem Abhängigkeiten von neuen Versionen von MSBuild oder Aufgaben / Zielen im .NET SDK übernommen werden.

Kunden, die neue Versionen des Compilers für ihre Builds verwenden möchten, werden stattdessen aufgefordert, eine der offiziellen Distributionen des Compilers zu verwenden:

  1. Verwenden Sie die Visual Studio Build Tools-SKU.
  2. Verwenden Sie das .NET SDK

Hinweis : Das Microsoft.Net.Compilers-Paket wurde vor einigen Jahren offiziell als Teil des Microsoft.CodeDom.Providers.DotNetCompilerPlatform-Pakets unterstützt, da es eine Abhängigkeit war. Ab Version 2.0 wurde die Abhängigkeit von Microsoft.Net.Compilers entfernt und steht nun als völlig unabhängiges Paket. Gleichzeitig haben wir Microsoft.Net.Compiler verworfen, da es dafür keine expliziten Anwendungsfälle mehr gibt.

Dies bedeutet, dass einige Kunden unerwartet Microsoft.Net.Compiler in ihrer Projektdatei finden, da diese nicht entfernt wurde, als Microsoft.CodeDom.Providers.DotNetCompilerPlatform die Abhängigkeit löschte. Der Rat für solche Kunden ist, einfach den Verweis auf das Paket zu löschen. Es wird nicht mehr benötigt.

JaredPar
quelle
Sehr interessanter Einblick. Ich frage mich, warum der Aspekt der kurzfristigen Nutzung in der Beschreibung des NuGet-Pakets nicht erwähnt wird: nuget.org/packages/Microsoft.Net.Compilers
Jack Miller
@JackMiller Das wird in Microsoft.Net.Compilers.Toolset erwähnt . `Dieses Paket ist in erster Linie als Methode für den schnellen Versand von Hotfixes an Kunden gedacht. Die Verwendung als langfristige Lösung für die Bereitstellung neuerer Compiler in älteren MSBuild-Installationen wird ausdrücklich nicht unterstützt. Das kann und wird regelmäßig brechen. "
Youssef13
6

Es ist ein Paket, das Open-Source-C # - und Visual Basic-Compiler mit Rich-Code-Analyse-APIs versorgt.

Auf github finden Sie umfangreiche Dokumentationen:

https://github.com/dotnet/roslyn

ViRuSTriNiTy
quelle
5
Vielen Dank. Ich war schon einmal in der offiziellen Dokumentation, finde aber den Zweck des Projekts immer noch vage.
nützlichBee
2
@usefulBee Grundsätzlich ist es ein Ergebnis der Open-Source-Bewegung von Microsoft. Weitere Informationen finden Sie in Wikipedia: en.wikipedia.org/wiki/.NET_Compiler_Platform
ViRuSTriNiTy
1

Wie bereits erwähnt, enthält es die .NET-Compiler für C # und VB.NET.

Ein interessanter Aspekt dieses Pakets ist, dass Sie einen bestimmten Build des Compilers für Ihr Projekt angeben können, einschließlich einer Version, die noch nicht mit Visual Studio ausgeliefert wurde.

Wir verwenden dies in https://github.com/dotnet/project-system , einer Open Source-Komponente von Visual Studio. Es ermöglicht uns, Vorabversionen des Compilers für Sprachfunktionen für Hundefutter zu verwenden, die vom mit VS gelieferten Compiler nicht unterstützt werden.

Drew Noakes
quelle