Der Microsoft Technologiestack umfasst mehrere Plattformen. Das Programmiermodell unter Silverlight, Windows Phone und WPF ist jeweils sehr ähnlich. Die darunter liegenden Frameworks ebenfalls – aber dennoch grundsätzlich verschieden. Dies verhindert eine Referenzierung von Assemblies untereinander.
Besonders schnell wird dies bei der Entwicklung einer Silverlight Applikation sichtbar, die auf Datenklassen in einer .NET Assembly zugreifen möchte. Eine Duplizierung von Code wird hierdurch notwendig. Diese Redundanz hat einen erhöhten Pflegeaufwand zur Folge. Behelfen konnte man sich im .NET Framework 4.0 durch Code Generierung über T4 oder Dateiverlinkung. Bei letzter Variante wurde eine Class Library für die unterschiedlichen Frameworks angelegt und die Quellcodedateien jeweils verlinkt.
Die Web Anwendung referenziert in dem gezeigten Beispiel nun die Bibliothek Repository.Contract und die Silverlight Applikation die verlinkte Variante. Hierdurch wird die Redundanz reduziert. Das Vorgehen ist allerdings umständlich. Zusätzlich obliegt dem Entwickler die Verantwortung im Code nur Funktionen zu benutzen die in beiden Welten zur Verfügung stehen. Fehler werden erst bei einem Buildlauf erkannt.
Im Framework 4.5 steht nun ein neues Projekt Template „Portable Class Library“ zur Verfügung.
Beim Anlegen des Projekts werden die zu unterstützenden Frameworks festgelegt.
Die erstellte Bibliothek kann im gezeigten Beispiel nun sowohl von .NET Framework als auch Silverlight Projekten referenziert werden.
Eine Duplizierung von Code ist damit nicht mehr notwendig. Das Visual Studio unterstützt zusätzlich bei der Entwicklung, indem es nur noch die Funktionen über Intellisense bereitstellt, die von allen ausgewählten Frameworks unterstützt werden.
Die Portable Class Library ist damit ein gutes Beispiel dafür, wie das Visual Studio 2012 mit kleinen aber feinen Erweiterungen die Entwicklungsproduktivität noch einmal deutlich steigert.
Unter http://bit.ly/OVtXxN steht die Erweiterung ebenfalls für das Visual Studio 2010, eingeschränkt auf die durch dieses unterstützten Frameworks, zur Verfügung.