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