Próbowałem złamać tę wersję w ciągu ostatnich kilku tygodni i nie znalazłem jeszcze dobrego rozwiązania; mam nadzieję, że mogę tu znaleźć odpowiedź.Ładowanie 2 wersji zestawu w czasie wykonywania
Mam dwa zespoły (ZA & ZB), z których oba wskazują na wspólny projekt/dll (ZC), ale które mogą być w innej wersji (tj. Ta sama nazwa dll, te same przestrzenie nazw, niektóre klasy mogą być różne) . Każdy zestaw działa sam, jednak jeśli jeden jest ładowany przez inny w czasie wykonywania (np. A ładuje B), to nie mogę go uruchomić. Potrzebuję pomocy.
Oto konfiguracja:
- ZA zależy ZC (wspólne) w wersji 1.1
- ZB zależy od wersji ZC 1,0
ZA musi załadować potrzeby załadować coś w ZB (co zależy od ZC), w czasie wykonywania.
ZA to aplikacja główna. W katalogu bin
znajduje się katalog wtyczek plugins/plugin-ZB
, pod którym chciałbym umieścić wszystkie ZB i jego zależności (ZC).
Oto, co starałem dotąd:
Assembly.Load()
użyciu tej samej wersji dll - pracował w porządku.
Assembly.Load()
stosując różne wersje dll - ZB obciążeń, ale gdy metoda działa, mam metodę nie znaleziono wyjątku.
AppDomain.Load()
Błąd pliku nie znaleziono błąd; Skorzystałem nawet z delegata, aby rozwiązać zjazdy.
Niektóre szczegóły dotyczące ZC: - niektóre metody są publiczne statyczny (niektóre nie są). Na przykład. Log.Log("hello");
- niektóre mogą zwracać wartości (prymitywy lub obiekty). - niektóre metody nie są statyczne (i wartości zwracane).
Pomoc? - TIA
„Można mieć tylko jedną wersję zespołu o wydanie AppDomain” nie jest prawdą. Możliwe jest nawet odwołanie się do dwóch wersji zespołu z jednego zespołu, wyszukanie zewnętrznego aliasu po więcej informacji, oto pierwsza rzecz, która pojawia się w Google na przykładzie funkcji: http://blogs.msdn.com/ b/ansonh/archive/2006/09/28/extern-alias-walkthrough.aspx – Graham
Używanie dwóch AppDomains jest rozwiązaniem opisanego problemu. – Graham
Masz rację, odpowiedź zaktualizowana! –