Weiß jemand wie .NET referencen zur Laufzeit auflöst?
-
Hallo,
das Problem ist folgendes:
Ich habe eine Bibliothek die unter .NET 1.1 geschrieben wurde. Funktioniert dort auch wunderbar.
Diese Bibliothek wird jetzt aber in einer .NET 2.0 Anwendung benutzt. Ist die Bibliothek im GAC funktioniert immer noch alles.
Wenn aber die Bibliothek im Appfolder ist und nich im GAC erhalte ich einen Manifest Error.Mittlerweile habe ich herausgefunden das in der Bibliothek ein Konstrukt steckt was es so in .NET 2.0 gibt und zwar in der System.Windows.Forms.dll.
Genau wenn diese Stelle in der Bibliothek aufgerufen werden soll erhalte ich den Error.Kann es sein das .NET dann die Variante aus der Forms DLL nimmt. Oder anders gesagt hat jemand Ahnung wie die Auflösung funktioniert?
Im Internet habe ich nur Beschreibungen der Assembly Auflösung gefunden, aber die sind ja schon geladen. Jetzt geht es um das Innenleben.
-
Wäre es nicht möglich, den Typ aus der DLL für die Anwendung eindeutig zu machen, indem man über die Namespace-Namen darauf zugreift?
(Auflösungsreihenfolge etc. zu manipulieren - falls überhaupt möglich - klingt für mich nach einer Aktion, die man früher oder später bereut.)
-
Es handelt sich um eine gekaufte Bibliothek. Ich habe zwar die Quellen, aber nicht den Strong-Key.
Deshalb wird aus einem Neubauen der Bibliothek nichts.Die Reihenfolge will ich gar nicht Manipulieren. Ich will nur verstehen warum es sich so verhält, damit ich besser Argumentieren kann
wenn es um die Tatsächliche Lösung geht (z.B. die Bibliothek in den GAC packen).
-
Tampon schrieb:
Es handelt sich um eine gekaufte Bibliothek. Ich habe zwar die Quellen, aber nicht den Strong-Key.
Deshalb wird aus einem Neubauen der Bibliothek nichts.Das meinte ich auch nicht
Ich meinte, dass du in der .NET 2.0 Anwendung den Zugriff auf den Typ in der DLL über den vollqualifizierten Namespace machen sollst. Alternativ kannst du auch auf die neue .NET 2.0 System-Klasse per Namespace-Qualifier zugreifen, damit der Compiler weiß, welcher Typ gemeint ist.
-
Verdammt, ich vergaß zu erwähnen das in der Anwendung nur indirekt darauf zugegriffen wird.
Es handelt sich hierbei um Data-Binding, dementsprechend karcht es auch erst in System.Windows.Forms.Binding (wird von Anwendung gerufen).Es wird also versucht ein Control (kommt aus Bibliothek) an ein ViewModel zu Binden.
Damit das unter .NET 1.1 problemloser funktioniert wurden anscheinend sachen von späteren .NET Versionen nachgebaut.
Wie gesagt funktioniert unter 1.1 führt aber zu Problemen unter 2.0.Die Frage für mich ist tatsächlich nur warum es klapt wenn die Bibliothek im GAC und warum nicht wenn sie es nicht ist.
-
Meine Vermutung: Assemblies im GAC werden beim Suchen eines Typs bevorzugt behandelt (im Vergleich zu lokalen Assemblies)
Was du dir btw. anschauen kannst: http://msdn.microsoft.com/en-us/library/system.appdomain.typeresolve.aspx
-
Vielleicht hilft das: http://msdn.microsoft.com/en-us/library/k5b5tt23.aspx