Tipps und Tricks rund um .NET und Visual Studio

Codewiederverwendung mit Portable Class Libraries
Kommentare

Dr. Holger Schwichtenberg (MVP) teilt in der Kolumne „.NETversum“ sein Expertenwissen rund um .NET-Tools und WPF mit. In dieser Ausgabe geht es um Codewiederverwendung mit Portable Code Libraries.

Es gibt immer mehr Varianten des .NET Frameworks, die Teilmengen des ursprünglichen Frameworks darstellen bzw. über das ursprüngliche Framework hinausgehen. Wenn Anwendungsentwickler vor der Aufgabe stehen, eine Anwendung in mehreren Anwendungsarten (z. B. Windows-Desktopanwendung, Windows Phone App, Windows Universal App) zu erstellen, entsteht natürlich der Wunsch einer gemeinsamen Programmcodebasis in einer gemeinsamen Assembly. Dabei gab es bisher zwei Herausforderungen:

  • Projekttypen verschiedener .NET-Varianten sind nicht untereinander referenzierbar.
  • Der Codeeditor in Visual Studio und Compiler gibt den kleinsten gemeinsamen Nenner der Zielplattformen nicht wieder, sondern bietet alle Klassen/Klassenmitglieder des jeweiligen Projekttyps an.

Um zu vermeiden, dass Codedateien kopiert werden mussten, konnte man sich bisher mit Dateiverknüpfungen (Links) in Visual Studio behelfen. Nun aber gibt es eine bessere Lösung in Form der Portable Class Libraries. Sie sind als Add-on für Visual Studio 2010 verfügbar. Seit Visual Studio 2012 sind sie im Produkt bereits enthalten.

Portable Class Libraries sind ein Projekttyp im Dialog New Project. Es entsteht eine DLL Assembly, die auf mehreren verschiedenen Varianten von .NET laufen kann. Nach dem Neuanlegen einer Portable Class Library im Dialog Add New Project erscheint ein Auswahldialog, in dem man unter verschiedenen Varianten von .NET wählen kann. Zur Auswahl in Visual Studio 2015 stehen folgende Versionen:

  • .NET Framework 4.0 bis 4.6
  • Windows Apps 8.0, 8.1 und 10.0
  • Silverlight für Windows Phone 8.0 und 8.1
  • NET Core 5.0
  • Silverlight 5
  • Windows Phone 8.1
  • Android
  • IOS

Man muss hier mindestens zwei verschiedene Frameworks wählen, damit der Dialog sinnvoll ist.

Abb. 1: Auswahl der Zielframeworks für eine Portable Library (Quelle: Microsoft)

Anschließend stehen in dem Projekt nur die .NET-Klassen zur Verfügung, die es in allen gewählten Zielframeworks gibt. Weitere Referenzen können nicht gesetzt werden. Leider funktioniert der Object-Browser nicht, um die verfügbaren Klassen zu erforschen. Die IntelliSense-Funktion und der Compiler sind aber auf die tatsächlich in den gewählten .NET-Varianten gemeinsam verfügbaren Klassen eingeschränkt. Die Portable Class Library kann dann von anderen Projekten (in allen gewählten Zielframeworks) wie eine ganz normale Assembly referenziert werden. Abbildung 1 zeigt die Auswahl der Zielframeworks für eine Portable Library.

Die Zielframeworks können auch nachträglich in den Projekteigenschaften (Registerkarte Library) geändert werden. Durch das Hinzufügen neuer Referenzen im Add Reference-Dialog kann sich die Anzahl der möglichen Zielframeworks verringern.

Abb. 2 : Referenzenanzeige im Solution Explorer und „Add Reference“-Dialog bei einer Portable Class Library

Portable Class Libraries können zum Beispiel verwendet werden, um gemeinsame Modelle und ViewModels gemäß dem MVVM-Pattern (Model View ViewModel) zu realisieren, die in verschiedenen Anwendungstypen mit verschiedenen Views in verschiedenen XAML-Dialekten (z. B. Silverlight, WPF, WinRT, Xamarin Forms) verwendet werden. Wichtige (Datenbindungs-)Schnittstellen für das MVVM-Pattern (z. B. INotifyCollectionChanged, ObservableCollection(Of T), INotifyDataErrorInfo, ICommand) stehen in Portable Class Libraries zur Verfügung.

Eine Portable Class Library kann Ressourcendateien (.resx) aufnehmen und dazu dienen, gemeinsame Ressourcen anwendungsartübergreifend zu verwalten. In Portable Class Libraries steht die Klasse System.Ressources.RessourceManager zur Verfügung.

Es gibt ja bekanntlich einige Abweichungen zwischen den verschiedenen .NET-Varianten. Zum Beispiel gibt es in Silverlight in der Klasse System.Net.HttpWebRequest eine Property SupportsCookieContainer. Dies gab es nicht in .NET 4.0, es wurde aber in .NET 4.5 eingeführt. Ebenso gibt es Verhaltensunterschiede zwischen den verschiedenen .NET-Varianten, die sich auch auf Portable Libraries auswirken. Weitere Information zu Portable Class Libraries finden Sie unter folgendem Link.

Windows Developer

Windows DeveloperDieser Artikel ist im Windows Developer erschienen. Windows Developer informiert umfassend und herstellerneutral über neue Trends und Möglichkeiten der Software- und Systementwicklung rund um Microsoft-Technologien.

Natürlich können Sie den Windows Developer über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist der Windows Developer ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -