Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Laden von Assembies mit Assembly.Load(...)
ltrader
myCSharp.de - Member



Dabei seit:
Beiträge: 60
Herkunft: Mannheim

Themenstarter:

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

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
JuyJuka
myCSharp.de - Experte

Avatar #avatar-2316.jpg


Dabei seit:
Beiträge: 2282
Herkunft: Deutschland

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JuyJuka am .
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 4055
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
ltrader
myCSharp.de - Member



Dabei seit:
Beiträge: 60
Herkunft: Mannheim

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers