2009-10-22 10 views
16

Mam rozwiązanie z 3 projektami (GUI, BL i DAL). Zespół DAL jest podpisany i wdrożony w GAC.. Priorytety ładowania zespołów .NET

Kiedy buduję rozwiązanie, DAL jest kompilowany, a zestaw umieszczany w folderze bin głównego projektu. Ale po uruchomieniu aplikacji ładuje się wersję GAC zamiast lokalnej. Dlaczego to?

Uświadomiłem sobie, że ponieważ wersja w GAC nie była najnowsza i brakowało niektórych metod, mimo że kompilacja była w porządku.

Czy GAC ma pierwszeństwo przed folderem lokalnego?

TKS z góry

Odpowiedz

19

Krótka odpowiedź Tak,, GAC ma pierwszeństwo przed plikami lokalnymi.
To jest inne zachowanie niż to, do czego jesteśmy przyzwyczajeni w rodzimym świecie dll (z wyjątkiem niektórych bibliotek systemowych, które zawsze są ładowane z SYSTEM32 bez względu na wszystko).

Dlaczego?
Wyobraź sobie, że masz wiele aplikacji z tym samym złożeniem, a teraz w zespole występuje błąd w jaki sposób naprawiasz wszystkie aplikacje? Trudno jest rozpocząć wyszukiwanie wszystkich aplikacji we wszystkich sterownikach, łatwiej jest wdrożyć pojedynczy zespół w GAC i naprawić całą aplikację na raz.

Jeśli chodzi o twój problem, jeśli zmienisz interfejs API, musisz zmienić wersję zespołu tego zespołu, w ten sposób silnik syntezy podniesie wersję, która znajduje się w folderze lokalnym.

+0

Tks za odpowiedź, specjalnie na ostatnią część dotyczącą wersjonowania. – Dante

7

Tak to najpierw sprawdzić GAC. Zasady ładowania są udokumentowane here. Aby rozwiązać problem, należy zaktualizować wersję zespołu podczas zmiany interfejsu API.

+0

Tks za link, bardzo przydatne! – Dante

Powiązane problemy