Laden...

Laden von Assembies mit Assembly.Load(...)

Erstellt von ltrader vor 14 Jahren Letzter Beitrag vor 14 Jahren 850 Views
L
ltrader Themenstarter:in
60 Beiträge seit 2008
vor 14 Jahren
Laden von Assembies mit Assembly.Load(...)

Hallo,

auf automatisierte Weise laden wir unter bestimmten Umständen Typen zur Laufzeit. Um an den Typen zu kommen greifen wir auf die Assembly, die u.a. auf folgende Weise im XML definiert ist:

"MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b12a5c561934e089"

Jetzt stellt sich mir die Frage, was ich tun kann um eine TypeLoadException zu verhindern wenn die entsprechende Assembly durch eine mit einer neueren Version ausgetauscht wurde.

Soweit ich weiss gibt es die Möglichkeit einen Abschnitt in der app.config - Elemente dependentAssembly - bindingRedirect - zu definieren der ein Mapping mit definiert.

Gibt es eine Möglichkeit, auf diese Konfiguration zu verzichten?

Sodass z.B.
"MyAssemblyName, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b12a5c561934e089"
geladen wird wenn
"MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b12a5c561934e089"
definiert ist, aber anstelle dieser erstere gefunden wird?

Danke im Voraus für jeden Hinweis 😃

Viele Grüße

Real programers do not comment their code.
It is hard to write and it should be hard to understand!

2.187 Beiträge seit 2005
vor 14 Jahren

Hallo Itrader,

Für private Assemblies:
Man muss System.AppDomain.CurrentDomain.AssemblyLoad abonieren und dort einfach den übergebenen string umwandeln (Split auf , und damit laden).
Alternativ kann man auch einfach nur mit dem AssemblyNamen laden ohne Version, Clutur, usw. (z.B. einfach nur "MyAssemblyName" stadt deinem Beispiel)

Für globale Assemblies:
Für private Assemblies kann man dem neuen Assemblie (der neuen Version) eine Publischer-Policity mitgeben siche auch :rtfm:.

Gruß
Juy Juka

3.971 Beiträge seit 2006
vor 14 Jahren

Wenn du Assembly.Load einsetzt (wichtig, nicht LoadForm), kannst du innerhalb der App oder Web.Config mit BindingRedirect arbeiten. Das ganze funktioniert allerdings nur auf Basis der Versionsnummer. AssemblyName, Kultur oder Token müssen weiterhin exakt übereinstimmen.

Specifying Custom Version Policies:
C# and the .NET Platform - Chapter 6

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

L
ltrader Themenstarter:in
60 Beiträge seit 2008
vor 14 Jahren

Hallo ihr beiden!

Danke für eure Tipps, ich werde mir mal ein Sample bauen, dass die entsprechenden Möglichkeiten durchprobiert.

Grüße und danke!

Real programers do not comment their code.
It is hard to write and it should be hard to understand!