Laden...

Welche Assembly aus dem GAC wird geladen, wenn sich zwei Assemblies nur in der Kultur unterscheiden?

Erstellt von degri2006 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.745 Views
D
degri2006 Themenstarter:in
21 Beiträge seit 2009
vor 14 Jahren
Welche Assembly aus dem GAC wird geladen, wenn sich zwei Assemblies nur in der Kultur unterscheiden?

Hallo,
ich habe mal eine Frage zu Assemblies und dem GAC und Assemblies. Jede Assembly hat ja eine Kulturangabe. Was passiert, wenn sich zwei Assemblies nur durch ihre Kulturangaben unterscheiden. Welche Assembly wird denn übernommen? Wie wird es entschieden? Wenn z.B zwei Assemblies die Primärangabe de, Sekunderangabe keine und Primärangabe de , Sekundärangabe ch hat. Von welcher Instanz wird entschieden, welche Assembly genommen wird? Steht denn irgendwo in der Datenbank der GAC drin, in welcher Reiehenfolge man die Kulturangaben berücksichtigen soll??

3.971 Beiträge seit 2006
vor 14 Jahren

Es wird immer die Assembly (GAC oder nicht auch lokal) geladen, gegen die du dein Projekt kompiliert hast. Das ganze nennt sich vollqualifizierender Assemblyname. Dabei müssen Name der Assembly, Kultur, Version und PublicToken exakt übereinstimmen. Das laden übernimmt für dich dann die CLR.

Möchtest du eine andere Vorgehensweise, musst du dein Projekt auf Late-Binding umbauen und die entsprechende Assembly selbst laden.

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

D
degri2006 Themenstarter:in
21 Beiträge seit 2009
vor 14 Jahren

Hallo,
damit ich das richtig verstehe. Es wird immer das Assembly genommen, dessen Kultur mit den Assemblies aus meinem Projekt übereinstimmen?
Wenn ich z.B. ein Programm in C# schreibe und in dem Quelltext schreibe, dass er noch eine Assembly aus dem GAC laden soll, diese aber zweimal in dem GAC existiert, nur in verschiendenen Kulturversionen, dann wird immer das Assembly genommen, dessen Kultur mit Kultur aus der AssemblyInfo.cs aus meinem Projekt übereinstimmt. Ist das so richtig?

3.971 Beiträge seit 2006
vor 14 Jahren

Nein, wenn du ein Projektverweis auf eine Assembly hast, wird immer der vollqualifizierende Assembly-Name in deiner Anwendung/Bibliothek gespeichert. Das gleiche wenn du Assembly.Load (nicht Loadfrom) benutzt. Im vollqualifizierenden Namen ist u.a. die Kultur enthalten. Die CLR sucht an anschließend beim Laden (entweder Assembly.Load oder Programmstart) nur nach diesem vollqualifizierenden Assemblynamen.

Der vollqualifizierende Assembly kann quasi als eindeutige ID betrachtet werden.

Verwendest du hingegen Assembly.Loadfrom musst du selbst auf den vollqualifizierenden Assemblynamen achten.

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