Laden...

Assembly.LoadFrom ohne versionierte Abhängigkeit

Erstellt von trib vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.504 Views
T
trib Themenstarter:in
708 Beiträge seit 2008
vor 9 Jahren
Assembly.LoadFrom ohne versionierte Abhängigkeit

Hallo zusammen,

ich habe aktuell ein Problem, wo ich A: Nicht weiter komme und B: Die generelle Funktionsweise dahinter nicht verstehe 😦

Für eine Anwendung habe ich eine Erweiterung geschrieben. Diese leitet natürlich von einem Interface ab, welches mir die Anwendung zur Verfügung stellt. Die Anwendung erhält etwa einmal im Monat ein Update, womit sich die Build & Versionsnummer der Anwendung und eben auch dessen Interface ändert.
Die Erweiterungen sind jedoch alle aufwärts kompatibel.

Meine Erweiterung verweise nun auf die spezielle Version 5.0.0, obwohl die Anwendung mittlerweile 5.1.2 verwendet. Kein Problem soweit für das Programm.
Allerdings kann ich nun meine eigene DLL nicht mehr mit Assembly.LoadFrom auslesen, da diese die V 5.1.2 erwartet, aber die 5.0.0 referenziert.

Leider kann ich auch nicht fest auf die 5.0.0 referenzieren, das es noch weitere Erweiterungen von Kollegen gibt, die eine Zwischen-Version z.B. 5.0.7 verwenden können.

Wie kann ich nun meine eigene DLL auslesen, ohne die exakte Version deren Abhängigeit zu kennen?
Bzw. wie kann die Anwendung das ohne weiteres?

Ach, und weshalb mache ich das überhaupt? Ich brauche den Namen, die Beschreibung und die Version der Methode, die von dem Interface abgeleitet wird.

S
145 Beiträge seit 2013
vor 9 Jahren

Klingt mir danach als wenn du immer die AssemblyVersion erhöht hast.
Erhöhe die Dateiversion dort gibts diese Abhängigkeitenprüfung nicht.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo trib,

welche Überladung der Assembly.LoadFrom-Methode benutzt du?

Inwiefern wird bei Assembly.LoadFrom eine bestimmte Version referenziert?

herbivore

T
trib Themenstarter:in
708 Beiträge seit 2008
vor 9 Jahren

welche Überladung der Assembly.LoadFrom-Methode benutzt du?

Inwiefern wird bei Assembly.LoadFrom eine bestimmte Version referenziert?

Hallo herbivore,

ich lade sowohl die DLL mit dem Interface, als auch die Extensions per

Assembly.LoadFrom(assemblyFilePath);

Also über den reinen Dateipfad, samt dessen Abhängigkeiten.

Die Extensions rufen dann einen Fehler (Die Abhängigkeit konnte nicht gefunden werden...) hervor, wenn die Versionsnummer nicht exakt übereinstimmt.

Gruß,
trib

PS: Ich versuche mich gerade an

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyFilePath);

Dann muss ich aber einiges umstellen um an die Beschreibung zu kommen (Ist ein DescriptionAttribute)

[EDIT]:
So, das war schon die richtige Richtung. Danke!

Assembly.Load(AssemblyName.GetAssemblyName(assemblyFilePath));

wird auf das Interface angewendet, so dass die DLL ohne Version im Speicher landet. Anschließend kann ich die Extensions mit Assembly.LoadFrom problemlos laden. (Außer diese enthalten wiederum eine exakte Versionsabhängigkeit)