2009-05-14 7 views
2

Ich habe eine ASP.NET-Anwendung, die eine benutzerdefinierte .NET-Bibliothek (eine .DLL-Datei) verwendet. Diese .DLL-Datei wird stark benannt. Die Bibliothek hat häufige kleine Updates, und ich möchte in der Lage sein, diese .DLL zu aktualisieren, ohne die Anwendung erneut zu kompilieren. Die Anwendung muss vorkompiliert werden, da ich meinen Kunden nicht die Quelle geben möchte (nicht, dass sie nicht dekompiliert werden kann, aber das ist nebensächlich).Wie kann ich meiner ASP.NET-Anwendung mitteilen, eine beliebige Version einer stark benannten Assembly zu verwenden?

Kann das irgendwie gemacht werden? Ich bekomme gerade einen Fehler, dass die .DLL von der falschen Version ist.

Antwort

5

Sie können eine aktualisierte Konfigurationsdatei für die neue DLL bereitstellen. Für diese Konfiguration muss eine benutzerdefinierte Versionsrichtlinie Anforderungen von einer DLL zur anderen umleiten. Weitere Informationen finden Sie unter this article.


Eigentlich hat this article weitere Informationen über den gesamten Prozess und die verschiedenen Ebenen, die Sie auf eine Version Politik definieren.

+0

Nicht schlecht, aber ich würde wahrscheinlich eine Versionsumleitung für jede Version der .DLL bereitstellen, die ich installiere, oder? Wäre schöner, wenn ich einfach die neue .DLL kopieren könnte und es würde laufen. Aber im schlimmsten Fall kann das auch funktionieren. –

+0

Leider denke ich, dass es der Punkt ist, der auf diese Weise gemacht werden muss. Es zwingt den Entwickler zu bestätigen, dass die Verwendung einer neuen Version der DLL getestet wurde und kein unerwartetes Verhalten liefert. Die andere Option wäre, dass es immer die neueste Version lädt und Sie wieder in der DLL-Hölle der C-Stil-Programmierung sind, wo das Aktualisieren für eine Anwendung eine andere nicht zusammenhängende brechen kann. –

+0

Da diese DLL lokal für meine Anwendung ist (nicht in GAC oder Systemordnern), wäre jede Hölle meine allein. Aber ja, ich wollte es riskieren. : P OK, dann werde ich das tun, denke ich ... –

0

Sie können Reflection verwenden, um die Assembly zur Laufzeit dynamisch zu laden. Activator.CreateInstance sollte den Trick machen.

IMyInterface myObject = (IMyInterface)Activator.CreateInstance("TheAssemblyName", 
              "TheTypeName", 
              null) 

Wenn Sie .Net 3.5 verwenden, können Sie die Add-Ins und Erweiterbarkeit verwenden. Werfen Sie einen Blick hier: http://msdn.microsoft.com/en-us/library/bb384241.aspx

+0

Nein, ich kann die Assembly nicht dynamisch laden, weil ich sie überall benutze. Ich würde nicht nur die Hälfte meiner Bewerbung umschreiben müssen, sondern es wäre auch eine große Herausforderung, damit zu arbeiten. Und es wäre auch schwierig, alles auf die AddIn-Architektur zu migrieren, da die .DLL Hunderte von Klassen enthält, die ich verwenden muss. –

+0

Autsch, das wäre zu einfach und die reale Welt nie zu einfach :) –

0

Vielleicht haben Sie gerade die stark typisierte DLL im GAC setzen, Ende tun dll Versionierung, so die ältere Version wird immer verfügbar und die neue ist nur durch die neuen kompilierten Anwendungen verwendet werden, , und die älteren Apps werden mit ihrer alten DLL-Version verwendet, bis sie erneut kompiliert und bereitgestellt werden.

Hoffe das hilft vielleicht.