Próbuję zainstalować usługę systemu Windows przy użyciu programu InstallUtil.exe i pojawia się komunikat o błędzie
System.BadImageFormatException: nie można załadować pliku lub zestawu „
{xxx.exe}
” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.
Co daje?
EDYCJA: (nie przez OP) Pełna wiadomość wyodrębniona z dup, uzyskując o wiele więcej trafień [dla Googleability]:
C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> InstallUtil.exe C: \ xxx.exe Narzędzie instalacyjne Microsoft (R) .NET Framework Wersja 4.0.30319.1 Copyright (c) Microsoft Corporation. Wszelkie prawa zastrzeżone.
Wystąpił wyjątek podczas inicjowania instalacji: System.BadImageFormatException: nie można załadować pliku lub zestawu „file: /// C: \ xxx.exe” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.
Upewnij się, że najnowszy Framework (ten, z którym skompilowałeś swoją aplikację) jest pierwszy w PATH. To rozwiązało problem. (Znalezione na forum )
źródło
Myślę, że używasz 64-bitowej wersji narzędzia do instalowania aplikacji 32-bitowej. Zmierzyłem się również z tym problemem dzisiaj i skorzystałem z tej ścieżki Framework, aby go zaspokoić.
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319
i powinien dobrze zainstalować twoją aplikację 32-bitową.
źródło
Kluczem jest ustawienie dopasowania ustawień procesora dla projektu, które znajdują się w dwóch miejscach.
Upewnij się również, że ustawienia architektury są takie same w menu Test >> Ustawienia testowe >> Domyślna architektura procesora >>, jak pokazano poniżej.
To jest dla VS2013, ale może to samo dla innych wersji.
Aktualizacja - dla VS2019:
źródło
OK, to jest problem, który miałem i to, co go naprawiło, wydaje się być bardzo istotne dla powyższego.
Używam programu Visual Studio 2010 Express. Napisałem serwis testowy, który tak naprawdę nic nie zrobił. To była tylko praktyka później.
Napisałem usługę i próbowałem ją zainstalować za pomocą
installutil.exe
i otrzymałem następujący błąd:Jak dotąd to samo, co pierwotny autor.
Zbawicielem była tutaj powyższa obserwacja Rubena dotycząca 32-bitowego wyjścia programu Visual Studio 2010.
Użyłem 64-bitowej wersji programu
installutil.exe
i oczywiście, wynik kompilacji Visual Studio 2010 był 32-bitowy. Aby dodać trochę dodatkowej wartości, możesz znaleźć 32-bitową wersję najnowszej platformy .NET i powiązaną z niąinstallutil.exe
w folderze C: \ Windows \ Microsoft.NET \ framework . Korzystanie z tej wersjiinstallutil.exe
rozwiązało mój problem; usługa zainstalowana bez żadnych problemów!Mam nadzieję, że to pomoże komuś innemu.
źródło
Po wypróbowaniu wszystkich wymienionych rozwiązań znalazłem w
PlatformTarget
jakiś sposób dodane doAnyCPU
konfiguracji w moim projekcie .csproj.Usunięcie linki zadziałało dla mnie.
źródło
Processor Architecture for AnyCPU Projects
) wszystko zaczyna działać ponownie.Miałem ten problem z projektem WinForms używającym VS 2015. Moje rozwiązanie było:
źródło
Miałem ten sam problem. Używam standardowego polecenia do wykonania. To było wywołanie X64 ro run przeciwko testom X86. Musiałem określić X86, a nie wersję X64 nunit-runner.
źródło
Podsumowując, zarówno Build, jak i Project \ Build \ Platform muszą być ustawione na x64, aby pomyślnie zainstalować usługę 64-bitową w systemie 64-bitowym.
źródło
Mój problem był inny. Stało się to po nieoczekiwanym zamknięciu mojego komputera z systemem Windows 7. Wykonałem czysty roztwór i działał zgodnie z oczekiwaniami.
źródło
W przypadku wystąpienia tego komunikatu w testach na żywo , ale nie w testach jednostkowych , dzieje się tak, ponieważ wybrane zestawy są kopiowane w locie do
$(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\
. Ale czasami nie można wybrać kilku zestawów , np. Biblioteki DLL VC ++ w przypadku projektów międzyoperacyjnych c ++ / c #.Post-build
xcopy
nie naprawi problemu, ponieważ skopiowany plik zostanie usunięty przez silnik testu na żywo.Jedynym dotychczasowym obejściem (28 grudnia 2018 r.) Jest unikanie testów na żywo i wykonywanie wszystkiego w testach jednostkowych z atrybutem
[TestCategory("SkipWhenLiveUnitTesting")]
zastosowanym do klasy testowej lub metody testowej.Ten błąd jest widoczny w dowolnym programie Visual Studio 2017 do 15.9.4 i musi zostać rozwiązany przez zespół programu Visual Studio.
źródło
Kompilacja docelowa x64 Hosting serwera docelowego IIS 64-bitowy
Kliknij prawym przyciskiem myszy appPool hosting obsługujący witrynę internetową / aplikację internetową i ustaw opcję Enable 32-bit application = false.
źródło
Dzisiaj miałem do czynienia z tym problemem. W moim przypadku docelowa platforma mojej aplikacji (miała odniesienie do 64-bitowej biblioteki dll) była ustawiona na,
AnyCPU
alePrefer 32-bit
pole wyboru w sekcji docelowej platformy było domyślnie zaznaczone. To był problem i działał dobrze po usunięciu zaznaczeniaPrefer 32-bit
opcji.źródło
Znaleźliśmy inne rozwiązanie problemu z tym samym objawem:
Widzieliśmy ten błąd, kiedy zaktualizowaliśmy projekt z .net 4.7.1 do 4.7.2.
Problem polegał na tym, że chociaż nie odnosiliśmy się już do System.Net.Http w projekcie, został on wymieniony w sekcji dependentAssembily naszego web.config. Usunięcie tego i wszelkich innych nieużywanych odwołań do zestawów z pliku web.config rozwiązało problem.
źródło
Problem w tym, że wszystkie,
System.BadImageFormatException: Could not load file or assembly
łącznie z tymi, z którymi w ogóle nie są skojarzone,installutil.exe
wskazują na ten wątek.Jeśli problem jest związany z bibliotekami DLL
WindowsBase
lubPresentationFramework
i masz zainstalowane analizatory, upewnij się, że są one zainstalowane dla wszystkich projektów w rozwiązaniu lub dla żadnego z nich.Odwołaj się do całej struktury w
.csproj
pliku swojej biblioteki, a nie tylko do dwóchdlls
:Usuń
bin
iobj
skieruj, wyczyść roztwór i odbuduj.źródło