2017-12-13 26 views
0

Ich arbeite an einem Dienst, der NSWag verwendet, um einen C# -Proxy für den Dienst zu generieren, wenn eine URL zu einer Swagger-Definition angegeben wird. Der gesamte Proxy ist in einer einzelnen C# -Datei enthalten.Generieren von .NET Standard 2.0 DLL mit Roslyn CSharpCompilation

Ich möchte die Kompilierung des generierten Codes in eine .NET Standard 2.0 DLL mit Roslyn automatisieren. Dies sollte im Speicher mit der CSharpCompilation-Klasse erfolgen.

Um dies zu bestätigen, habe ich ein .NET Standard 2.0 Klassenbibliotheksprojekt in Visual Studio 2017 erstellt und NuGet-Abhängigkeiten für Newtonsoft.Json (10.0.3) und System.ComponentModel.Annotations (4.4.0) hinzugefügt. . Ich kann sehen, dass der Projekttyp auch eine SDK-Abhängigkeit von NETStandard.Library einbringt.

Ich verstehe, dass ich nicht eine Projektdatei verwenden, um die DLL mit Roslyn zu generieren, jedoch habe ich Mühe, die entsprechenden Schritte zu ermitteln, um die gleiche DLL zu generieren.

+0

Warum verwenden Sie nicht eine Projektdatei - es wird es viel einfacher machen. –

+0

Ich habe keine Beispiele gesehen, in denen Sie eine Projektdatei einspeisen können. Können Sie mich mit einer verknüpfen? –

+0

Verwenden Sie einfach die dotnet cli –

Antwort

1

Der Schlüssel zum Erstellen einer .NET Standard-DLL war das Auswählen der richtigen DLLs, die als MetadataReference-Objekte hinzugefügt werden sollen. Es war mir zunächst nicht klar, was diese waren, da das .csproj-Format von Visual Studio 2017 diese nicht explizit referenziert.

Ich war in der Lage, das NuGet-Paket für netstandard.library herunterzuladen und den Inhalt durchzulaufen, indem ich jede DLL als MetadataReference hinzufüge. Ich glaube, dass dies das gleiche Ziel wie das Hinzufügen einer .csproj SDK-Abhängigkeit von NetStandard.Library erreicht.

Mit dem Hinzufügen dieser Referenzen konnte ich meinen generierten Code kompilieren. Ich habe meine Ausgabeassembly getestet, indem ich sie von einer .NET Core 2.0-Konsolenanwendung aus referenzierte.

Möglicherweise gibt es einen einfacheren Weg dazu - ich würde mich freuen, es zu hören!

Verwandte Themen