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!
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
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...
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!