według MSDN documentation,Assembly.LoadFrom BadImageFormatException - różne zachowanie w .NET 4.0 i 4.5 (ewentualnie nieudokumentowane)
public static Assembly LoadFrom(string assemblyFile)
rzuca BadImageFormatException
jeśli
assemblyFile is not a valid assembly.
-or-
Version 2.0 or later of the common language runtime is currently loaded
and assemblyFile was compiled with a later version.
Faktycznie, jest jeden dodatkowy przypadek - Loading zestaw zbudowany dla x86 z zestawu, który działa w trybie x64. Być może jest on zawarty w stwierdzeniu "nie jest ważnym zgromadzeniem", nie wiem. Ale jest to uzasadniona przyczyna wyjątku.
OK, ale w .NET 4.5 to nie działa! Mam aplikację .NET 4.5 WPF, która z jakiegoś powodu ładuje różne aplikacje. Buduje dla każdego procesora i uruchamiam go na Win64 x64. Testowałem go na jednym pliku wykonywalnym, który jest zbudowany dla .NET 4.0 x86 i działał dobrze. Ale kiedy zmieniłem moją aplikację na .NET 4.0, zaczęło się to zawieszać na metodzie Assembly.Load
!
Moje pytanie brzmi: czy czegoś brakuje? Jeśli nie, to w jaki sposób to zrobili - ładowanie zestawu x86 z procesu x64 w .NET 4.5? W tej chwili brakuje mi zrozumienia.
Aktualizacja
Dzięki Hans Passant, mam zorientowali się, mój błąd. W rzeczywistości zachowanie Assembly.Load
jest nie różni się. Okazało się, że nie zauważyłem opcji Prefer 32-bit
w ustawieniach projektu (lub tagu Prefer32Bit w pliku .csproj). Dlatego mój proces w .NET 4.5 ran in a 32-bit mode. To ustawienie było true podczas tworzenia projektu WPF .NET 4.5. Następnie, kiedy został przeniesiony do .NET 4.0, stał się nieaktywny, ponieważ nie było takiej opcji w .NET 4.0. A kiedy przełączyłem się z powrotem na .NET 4.5, stało się fałszywe, co jest tak, jak sądzę, ze względu na kompatybilność.
"kiedy zmieniłem moją aplikację na .NET 4.0", masz na myśli .NET 4.5? ;) – HericDenis
Nie, początkowo został zbudowany na 4.5, ale potem zdaliśmy sobie sprawę, że potrzebujemy go do pracy nad 4.0 – EvAlex
Jeśli jest to problem w środowisku wykonawczym, nie jest on związany z dostarczonymi kompilatorami tych wersji. Nieopisane. – leppie