2010-02-12 12 views
5

Mamy różne wersje zespołów o innej nazwie, bez wiążących przekierowań/sondowania ścieżek do nich w pliku app.exe.config. Na przykład MyDll (1.0.0.0_null_neutral) i MyDll (2.0.0.0_null_neutral). W odniesieniu do app.exe, te zespoły są przechowywane w LAC \ MyDll_1.0.0.0_null_neutral i LAC \ MyDll_2.0.0.0_null_neutral.W jaki sposób środowisko wykonawcze .NET zlokalizować niezweryfikowane "zespoły"?

Rozumiem, że ponieważ zestawy MyDll nie mają silnej nazwy, środowisko wykonawcze .NET nie rozróżnia różnych wersji MyDll. Dlatego, jeśli MyDll 1.0.0.0 był już załadowany do pamięci i jakiś kod, który został zbudowany na MyDll 2.0.0.0 został wykonany, środowisko .NET nie załadowałoby MyDll 2.0.0.0.

Jednak po dołączeniu do procesu za pomocą VS2008 i wyświetleniu okna modułów, zauważyłem, że zarówno MyDll 1.0.0.0, jak i MyDll 2.0.0.0 zostały załadowane z folderu LAC.

Wygląda na to, że gdzieś jest luka w moim rozumieniu. Czy ktoś może to wskazać?

EDYTOWANIE: Dzięki za odpowiedzi do tej pory. Tak, pominąłem ten fragment. Plik wykonywalny nasłuchuje zdarzenia AssemblyResolve i obsługuje je, sprawdzając w LAC.

Byłem prawie pewien, że widziałem dokumentację MSDN wcześniej, że wspomniane wersje są ignorowane, chyba że zespół ma silną nazwę. Zobaczę, czy mogę to wykopać.

+3

Nie można pracować tak, jak opisujesz. CLR nie może znaleźć biblioteki DLL w podkatalogu LAC bez zmiany ścieżki próbkowania. –

+0

Jaki jest twój cel posiadania dwóch różnych wersji zestawu, który wygląda tak samo tutaj? Nie możesz po prostu załadować najnowszą aplikację do pracy? –

+0

Dostępne są dwie różne wersje, ponieważ aplikacja składa się z różnych wtyczek napisanych przez różne zespoły, z których każdy może korzystać z innej wersji zespołu. Zazwyczaj używamy najwyższej wersji poprzez ścieżkę próbkowania/przekierowanie wiązania. Ale chciałem tylko wiedzieć, czy CLR nie lekceważy wersjonowania dla zespołów o innej nazwie. –

Odpowiedz

1

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

Krok 2 sprawdza, jeśli został załadowany, a to jest wersja specyficzny, nawet z pozycji, które nie są silnie nazwanych.

Krok 4 próbuje załadować zespół przez sondowanie, a to nie jest wersja specyficzna.

Co mi się nie podoba, jeśli nie masz żadnych informacji w pliku konfiguracyjnym, jak to jest znalezienie biblioteki DLL w pierwszej kolejności? Myślę, że w moim rozumieniu jest też luka :-).

Powiązane problemy