2011-01-28 16 views
6

Mam aplikację WPF, a ja subskrybuję to wydarzenie AppDomain.AssemblyResolve (to wydarzenie zostaje podniesione za każdym razem, gdy środowisko wykonawcze nie znajduje zespołu), i zauważam, że dostaje kilka razy próbę połączenia do rozwiązania MyAssembly.resources, gdzie MyAssembly jest bieżącym zestawem wykonawczym. Zapytał także o to samo dla zespołu biblioteki, do którego odwołałem się z MyAssembly (poprosił o Library.resources).AssemblyResolve zawsze się podnosił, pytając o MyAssembly.resources

Czy to normalne? Jak mogę to naprawić? Moja aplikacja ma problem. Nie można załadować niektórych formantów użytkownika Xaml znajdujących się w bibliotece. Czy to jest powiązane?

Odpowiedz

7

Dodaj tę linię do AssemblyInfo.cs, a twój przelicznik nie zostanie zapytany o zasoby.

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)] 

Chociaż jest to obejście, należy dokładnie rozważyć aplikacje wielojęzyczne.

Więcej informacji:

1

Wpadliśmy na ten sam problem z obsługi AssemblyResolve zdarzeń. Dziwne, widzieliśmy tylko problem na komputerach z systemem Windows XP. Nasza aplikacja jest zlokalizowana w wielu językach, więc nie chcieliśmy korzystać z NeutralResourcesLanguageAttribute. Nasza aplikacja została opracowana dla .NET v3.5, ale nadal było dotknięte AssemblyResolve zmiany documented NET v4.0:

Ważne Począwszy od .NET Framework 4, zdarzenie jest wywoływane ResolveEventHandler dla wszystkich złożeń, w tym zespołów zasobów . We wcześniejszych wersjach zdarzenie nie zostało podniesione dla złożeń zasobów . Jeśli system operacyjny jest zlokalizowany, program obsługi może być wywoływany wiele razy: raz dla każdej kultury w łańcuchu zapasowym .

Sposób, w jaki postanowiliśmy to sprawdzić e.Name i sprawdzić, czy szukał * .Resources.dll. Jeśli tego pliku nie znaleziono w AppDomain lub znanym folderze, usunęlibyśmy ".Resources" i odszukaliśmy * .dll. Jeśli ten plik istnieje, ładujemy go i zwracamy. To rozwiązało problem dla nas.