2009-10-22 14 views
16

Ich habe eine Lösung mit 3 Projekten (GUI, BL und DAL). Die DAL-Baugruppe wird im GAC signiert und bereitgestellt..NET-Baugruppen laden Prioritäten

Wenn ich die Lösung erstelle, wird die DAL kompiliert und die Baugruppe in den Ordner bin des Hauptprojekts gestellt. Aber wenn ich die Anwendung ausführe, lädt sie die GAC-Version anstelle der lokalen. Warum ist das?

Ich erkannte, dass, weil die Version in der GAC nicht die neueste war und einige Methoden fehlten, obwohl es gut kompiliert.

Hat der GAC Vorrang vor dem lokalen Ordner?

Tks im Voraus

Antwort

19

Kurze Antwort Ja, der GAC hat Vorrang vor lokalen Dateien.
Dies ist ein anderes Verhalten von dem, was wir in der nativen DLL-Welt gewohnt sind (ausgenommen einige System-DLLs, die immer von SYSTEM32 geladen wurden, egal was).

Warum?
Stellen Sie sich vor, dass Sie mehrere Anwendungen mit derselben Baugruppe haben, jetzt, da die Baugruppe einen Fehler aufweist. Wie werden alle Ihre Anwendungen repariert? Es ist schwierig, nach allen Anwendungen auf allen Treibern zu suchen. Es ist einfacher, eine einzelne Assembly auf dem GAC bereitzustellen und alle Anwendungen gleichzeitig zu reparieren.

Wenn Sie die API ändern, müssen Sie die Assembly-Version dieser Assembly ändern. Auf diese Weise wird die Fusion-Engine die Version im lokalen Ordner übernehmen.

+0

Tks für die Antwort, speziell für den letzten Teil über Versionierung. – Dante

7

Ja, es zuerst die GAC überprüfen. Die Ladevorschriften sind dokumentiert here. Um das Problem zu beheben, sollten Sie die Assembly-Version aktualisieren, wenn Sie die API ändern.

+0

Tks für den Link, sehr nützlich! – Dante

Verwandte Themen