Zehn Highlights in Visual Studio 2012: #1 Portable Class Libraries
In einer kleinen Serie stellt der Dotnet-Doktor zehn ausgewählte Funktionen von Visual Studio 2012 in den Bereichen Projektverwaltung und Code-Editoren vor, die ihm persönlich besonders gut gefallen. Den Auftakt machen Portable Class Libraries.
- Dr. Holger Schwichtenberg
Zehn Highlights in Visual Studio 2012:
- Portable Class Libraries
- "Add Reference"-Dialog
- NuGet Library Package Manager
- Verbesserter Solution Explorer
- Registerkartenverwaltung der geöffneten Dateien
- Verbesserter Suchen- und Ersetzendialog
- Suche über Visual-Studio-Funktionen/-Optionen
- Codeduplikate suchen
- Verbesserungen im Webeditor
- Page Inspector
Microsofts Entwicklungsumgebung Visual Studio bietet in der Version 2012 eine Reihe schöner neuer Funktionen für die .NET-Programmierer. In einer kleinen Serie stelle ich in diesem Blog zehn ausgewählte Funktionen in den Bereichen Projektverwaltung und Code-Editoren vor, die mir persönlich besonders gut gefallen. Neue Funktion im Bereich Application Lifecycle Management hat schon der Beitrag "Klasse statt Masse" auf heise Developer behandelt. Angefangen sei mit Feature Nr. 1:
Portable Class Libraries in Visual Studio 2012
Es gibt immer mehr Varianten des .NET Framework, die Teilmengen des ursprünglichen Frameworks darstellen bzw. über das ursprüngliche Framework hinausgehen: .NET Compact Framework, .NET Framework Client Profile, Silverlight, .NET Metro Profile usw. Wenn Anwendungsentwickler vor der Aufgabe stehen, eine Anwendung in mehreren Anwendungsarten (z.B. Windows Desktop, Windows Phone 7.5, Windows 8) 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 Code-Editor 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 Code-Dateien kopiert werden mussten, konnte man sich bisher mit Datei-Verknüpfungen (Links) in Visual Studio behelfen. Nun aber gibt es eine bessere Lösung in Form der "Portable Class Libraries", einem neuen Projekttyp in Visual Studio 2012. Dieses sind DLL-Assemblies, die auf mehreren verschiedenen Varianten von .NET laufen können. Nach dem Neuanlegen einer "Portable Class Libraries" im Dialog "Add New Project" erscheint ein Auswahldialog, in dem man unter verschiedenen Versionen von .NET, Silverlight und Windows Phone sowie Metro-Apps und Xbox wählen kann. Zur Auswahl stehen folgende Versionen: .NET Framework 4.0 und 4.5, Silverlight 4 und 5, Windows Phone 7 und 7.5. Man muss mindestens zwei verschiedene Frameworks hier wählen, sonst macht der Dialog keinen Sinn.
Anschließend stehen in dem Projekt nur die .NET-Klassen zur Verfügung, die es in allen gewählten Ziel-Frameworks 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 verfügbaren Klassen eingeschränkt. Die "Portable Class Libraries" kann dann von anderen Projekten (in allen gewählten Ziel-Frameworks) wie eine ganz normale Assembly referenziert werden.
Die Ziel-Frameworks können auch nachträglich in den Projekteigenschaften (Registerkarte "Library") geändert werden. Durch das Hinzufügen neuer Referenzen im "Add Reference"-Dialog können sich die möglichen Ziel-Frameworks verringern.
Hinweis: Portable Class Libraries sind auch als Zusatzwerkzeug (Add-In) für Visual Studio 2010 verfügbar:
Portable Class Libraries können zum Beispiel verwendet werden, um gemeinsame Modelle und ViewModels gemäß MVVM-Pattern (Model-View-ViewModel) zu realisieren, die in verschiedenen Anwendungstypen mit verschiedenen Views in verschiedenen XAML-Dialekten (z.B. Silverlight, WPF, WinRT) 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. Details dazu finden sich hier.
Eine Portable Class Library kann Ressourcen-Dateien (.resx) aufnehmen und dazu dienen, gemeinsame Ressourcen anwendungsartübergreifend zu verwalten. In Portable Class Libraries steht die Klasse System.Ressources.RessourceManager zur Verfügung.
Neben der Frage, ob eine bestimmte Klasse oder ein Klassenmitglied verfügbar ist, gibt es auch die Frage, ob das Verhalten gleich ist. Solche Verhaltensunterschiede kann eine Portable Library nicht beseitigen. Microsoft dokumentiert solche Fälle hier.
(Bild: http://msdn.microsoft.com/en-us/library/gg597391(v=vs.110).aspx)