Versionen-Kontrollen zwischen Assemblies

Beim Erstellen des Konzepts für unsere neue .NET-basierte Software-Entwicklungs-Umgebung stand ich vor der Frage, ob das .NET-Framework Versionen- und Abhängigkeits-Prüfungen zwischen Assemblies durchführt, und wenn ja, welche. Dabei ging es um ganz „normale“ Assemblies, also solche ohne einen strong name bzw. um solche, die sich nicht im GAC (global assembly cache) befinden.

Weil ich weder in der Studio-Dokumentation noch auf dem Internet schlaue Informationen zu diesem Thema finden konnte, habe ich selbst einige Experimente durchgeführt, deren Resultat mich doch etwas überrascht hat.

Es hat sich herausgestellt, dass das .NET-Framework solche Assemblies beim Laden völlig dynamisch auf der Stufe einzelner Methoden verknüpft, und dass alles andere ziemlich egal ist, sofern alle benötigten Methoden da sind.

Es beginnt damit, dass man in einer .NET-basierten Applikation nach dem Setup ein Assembly ohne Folgen „manuell“ d.h. einfach durch Überschreiben des Files austauschen kann. Es gibt offenbar keinerlei Registry-Einträge, Konsistenz-Prüfungen oder ähnliches, welche einen hiervon abhalten.

Das Fehlen einer Methode war die einzige Art, wie ich das System soweit bringen konnte, dass es nicht mehr funktionierte. Die Version, die man bei den Projekteigenschaften für ein Assembly angeben kann, wird auf jeden Fall nicht für Versionen-Prüfungen herangezogen: Man kann bei mehreren, voneinander abhängigen Assemblies eine davon durch eine neue Version austauschen, ohne dass sich die anderen davon beeindrucken liessen.

Man kann Code in einer Assembly haben, der eine Klasse verwendet, die in einer zweiten Assembly steckt, danach hingehen, diese Klasse erweitern, und in der bereits installierten Applikation der ersten Assembly eine neue zweite mit der erweiterten Klasse unterjubeln, und alles funktioniert, egal wieviele Instanz-Variablen, Properties und Methoden die Klasse dazubekommen hat.

Sie mögen sich fragen, wieso ich diese Fragen überhaupt abgeklärt habe. Es ist einfach gut zu wissen, dass man in einer grossen Applikation, die aus Dutzenden von Assemblies besteht, nicht zwangsweise ein Setup durchführen muss, sondern in einem Notfall gezielt auf File-Ebene eine bestimmte Assembly mit einem Bug drin durch eine korrigierte ersetzen kann – sofern man natürlich weiss, was man tut!

Advertisements
Veröffentlicht in Keine Kategorie. Schlagwörter: , , . Leave a Comment »

Wir sind jetzt Helden

Wie 3 meiner Kollegen nahm ich an den diesjährigen Microsoft TechDays teil, die am 19. und 20. März in der St. Jakobshalle in Basel durchgeführt wurden. Da kommt die Ehre, den allerersten Beitrag für das Megos .NET-Weblog schreiben zu dürfen, gerade recht, um meine Eindrücke festzuhalten.

Hat es im Zeitalter von Internet und Google immer noch einen Sinn, für 2 Tage persönlich nach Basel zu pilgern und sich Vorträge anzuhören, statt einfach alles am Bildschirm zu recherchieren und nachzulesen? Für mich lautet die Antwort ja, denn nur so bekommt man ein Stimmungsbild, und das ist wichtig, wenn man eine ganze Firma mittelfristig auf genau dieses Fundament stellen will, um das es bei diesem Event ging.

Auffallend war die grosse Anzahl Teilnehmer, weit über 1000. Man fragt sich spontan, wo in der kleinen (Deutsch-)Schweiz die alle herkommen, und man muss annehmen, dass Microsoft mit .NET und C# ein Angebot macht, das bei Schweizer Entwicklern auf fruchtbaren Boden fällt.

Beeindruckt hat mich die Konsequenz, mit der Microsoft alles auf C# umstellt. C# für den Code der Applikationen selbst, natürlich. C# als Code hinter Web-Applikationen, auch klar. C# für stored procedures im SQL Server, auch schon seit einer Weile, und warum nicht. Die Funktionalität der Office-2007-Programme mit C#-Code statt mit VBA erweitern zu können, ist hingegen ziemlich neu, aber eben folgerichtig, auch wenn es nicht einfach werden wird, gegen all die bestehenden Berge von VBA-Code anzugehen. Einen .NET-Button in ein Word-Dokument aufnehmen und dessen Event Handler in C# schreiben zu können, als ob nichts wäre, ist wirklich nicht schlecht.

Selbst die kleinsten Computer, mit denen man als „normaler“ Programmierer heutzutage arbeitet, nämlich Smartphones und PDAs, kann man, sofern Windows Mobile drauf läuft, Sie haben’s erraten, in C# programmieren.

All die Legionen von Open-Source-Programmieren mögen Microsoft zusetzen, und es wird interessant sein zu verfolgen, wie sich die Sache langfristig entwickelt, aber wie man an C# sieht, hat es auch Vorteile, eine Firma zu sein, wo jemand eine Linie vorgeben kann, die dann konsequent durchgezogen wird, mit wie erwähnt mittlerweile beeindruckenden Resultaten.

Die Keynote war eine verpasste Chance, wenn man mich fragt. Da hat man mal über 1000 für Microsoft wichtige Leute zusammen, von denen sich viele wohl wie ich erhoffen, persönlich und live zu sehen, wohin die Reise geht, mit einem Jahr Wartezeit für Microsoft bis zur nächsten solchen Gelegenheit, und bekommt dann eine „Konserve“ von Vortrag vorgesetzt, bei der es um alles mögliche geht, nur nicht um Dinge, welche Entwickler interessieren. Nun ja.

Bei den Vorträgen gab es hingegen jede Menge interessante Dinge zu hören und zu sehen. Unter den Vortragenden ist Sascha P. Corti mit Abstand mein persönlicher Favorit, so ziemlich egal, worum es geht – der Mann macht einfach gute Laune, und seine Begeisterung steckt an.

WPF (Windows Presentation Foundation, langfristig wohl die Ablösung für die bisherigen Benutzeroberflächen mit „normalen“ Windows-Controls) wurde ziemlich prominent dargestellt in mehreren Sessions. So etwas völlig neu aus dem Boden zu stampfen und zur Einsatzreife zu bringen dauert seine Zeit, aber es macht den Eindruck, als sei es bald geschafft. WPF ist auf jeden Fall etwas, das wir uns in der Megos näher anschauen werden.

Auch wenn mir persönlich das Motto der Veranstaltung HEROES happen {here} nicht viel sagte, haben sich diese zwei Tage auf jeden Fall gelohnt.

Veröffentlicht in Keine Kategorie. Schlagwörter: , . 1 Comment »