In diesem Artikel zeige ich euch, wie ihr eine Bibliothek für verschiedene Plattformen (z.B. .Net Core, .Net Framework) bereitstellen könnt. Seit der Einführung von .NET Core geht das ziemlich einfach, doch seht selbst.

Einführung

Wenn man sich bekannte Frameworks wie Catel[1] oder Newtonsoft.Json[2] anschaut, werden diese für die verschiedensten Plattformen bereitgestellt. Diese sind z.B:

  • .Net Framework 4.5
  • .Net Framework 4.6
  • .Net Standard 2.0
  • .Net Core 2.0
  • Mono
  • Xamarin

Mit relativ wenig Aufwand, kann auch die eigene Bibliothek für diverse Plattformen bereitgestellt werden. Eine Bibliothek lässt sich so überall einsetzen. Egal ob es sich um eine ältere Anwendung (z.B. Forms) handelt oder eine Neuentwicklung mit .Net Core.

Es ist zu beachten, dass manche Funktionen für manche Frameworks nicht zur Verfügung stehen. Das sehen wir uns allerdings in einem anderen Artikel genauer an.

Projekt einrichten

Wir erstellen im Visual Studio ein neues .Net Core oder .Net Standard Projekt (alernativ könnt ihr auch eine bestehende Bibliothek verwenden).

Die neue .csproj-Datei sieht ungefähr so aus:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

</Project>

Um mehere Frameworks zu unterstützen muss nur der Wert „TargetFramework“ zu „TargetFrameworks“ geändert werden. Bitte das S am Ende für den Plural beachten. Anschließend können weitere Ziele mit Semikolon getrennt eingetragen werden. Mögliche Werte sind in der MSDN-Dokumentation[3] aufgelistet.

Ändern wir nun das Projekt, um auch .Net Core und das .Net Framework 4.7.1 zu unterstützen.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netcoreapp2.1;net471</TargetFrameworks>
 </PropertyGroup>

</Project>

Dadurch, dass mehrere Frameworks unterstütz werden, ergeben sich 3 Änderungen im Visual Studio bzw. beim Kompilieren.

  1. Das Projekt zeigt mehrere Abhängigkeiten an (pro Ziel)
  2. Es kann zwischen verschiedenen Typen gewechselt werden
  3. Im Ausgabeverzeichnis befinden sich nun diverse Ordner pro Version

1. Mehrere Abhängigkeiten

Screenshot der Solution

Im Visual Studio werden uns die verschiedenen Abhängigkeiten pro Ausgabetyp angezeigt. Es kann vorkommen, dass eine bestimmte Plattform andere Abhängigkeiten besitzt als die anderen.

2. Wechsel zwischen Typen

Auswahl der Frameworks für die aktuelle Anzeige

Wenn eine Klasse ausgewählt worden ist, zeigt das Visual Studio eine Dropdownliste an. In dieser Liste kann der aktuelle Ausgabetyp gewechselt werden. Das ist vor allem dann hilfreich, wenn eine Klasse mit FrameworkA kompiliert werden kann, bei FrameworkB allerdings ein Fehler auftritt. Hierdurch wird beispielsweise Intellisense oder die Unterstützung vom ReSharper angepasst.

3. Ausgabeverzeichnis

Dateiverzeichnis nach dem Kompilieren

Wenn das Projekt kompiliert wird, gibt es normalerweise nur einen Unterordner. Da wird (in diesem Fall) 3 Frameworks unterstützen, werden 3 Ordner erstellt. Es gibt für jedes Framework einen Ordner. Darin befinden sich die kompilierten DLLs und ggfs. weitere Dateien.

Fazit und Ausblick

Wie ihr sehen konntet, kann eine Bibliothek sehr einfach für weitere Frameworks zur Verfügung gestellt werden. In einem anderen Artikel sehen wir uns an, was für Probleme auftreten können und wie wir diese lösen. Das Beispielprojekt habe ich bei GitHub[4] bereitgestellt.

Viel Spaß beim Erstellen von Bibliotheken 🙂


Bildquelle: Pixabay.com

[1]: nuget.org/Catel.Core/
[2]: nuget.org/Newtonsoft.Json
[3]: docs.microsoft.com/en-us/dotnet/standard/frameworks
[4]: github.com/mbedded/2018-09-10-MultipleTargets