2013-02-08 8 views
6

Pracuję nad aplikacją sieci Web na maszynie z 64-bitowym Windows 8 przy użyciu wielu istniejących bibliotek. Chcę użyć dwóch bibliotek DLL C# odnoszących się do jednej natywnej biblioteki DLL. Obie biblioteki DLL C# są kompilowane do użytku 64-bitowego i testowane w aplikacjach testowych. Moja aplikacja internetowa odwołuje się do bibliotek DLL C# i ma działać na IIS 8. Dwa pliki DLL C# zostały dodane jako odniesienia do projektu i natywnej biblioteki DLL ręcznie do folderu bin aplikacji internetowej. Ilekroć buduję i uruchamiam rozwiązanie, otrzymuję wyjątek pokazany w tytule. Wiem, że jest to znak problemu dotyczącego 32-bitowego i 64-bitowego kodu działającego w jednym procesie. Dlatego wypróbowałem wszystkie różne konfiguracje kompilacji, ale wynik nigdy się nie zmienił.BadImageFormatException: Nie można załadować pliku lub zestawu ... zły format - tylko z aplikacją WWW

Stworzyłem aplikację konsolową wykonującą dokładnie to, czego próbuję w aplikacji internetowej i działała bezbłędnie. Aplikacja sieciowa z tymi samymi ustawieniami rzuca jednak wyjątek, co jest dla mnie bardzo mylące.

Co próbowałem dotąd: ustawienie

  • basen Zmień zastosowanie do „umożliwiają aplikacje 32-bitowe”
  • skompilowania wszystkich bibliotek DLL z dowolnym procesorem, 64-bitową lub x86 cel
  • Sprawdź corflags wszystkich Pliki DLL

Mogę zapewnić eksport projektu dla wszystkich chętnych do pomocy w uruchomieniu tej konfiguracji!

Naprawdę doceniam każdą pomoc!

+0

Masz jeszcze jakieś rozwiązanie?Ponieważ również doświadczamy tego samego problemu i do tej pory nie znaleźliśmy działającego rozwiązania. –

+0

Cześć Saeed, przepraszam za moją spóźnioną odpowiedź. Ponieważ mój projekt był aplikacją internetową, postanowiłem stworzyć drugą aplikację internetową jako serwis internetowy, który sprawia, że ​​funkcjonalność rodzimej biblioteki dll jest dostępna poprzez REST. Nie znalazłem żadnego innego rozwiązania problemu. – JZet

Odpowiedz

0

Mam ten sam problem na mojej aplikacji. Zostało to naprawione po wykonaniu następujących czynności:

* Udzielenie pozwolenia dla użytkownika "anonimowego" w moim folderze witryny sieci Web.
* Zmiana puli aplikacji z ".NET v4.5 Classic" na ".NET v4.5".

0

Wszystko, co mogę zaoferować, to pomoc w określeniu, co się nie ładuje. Jeśli jest to serwer dev, może być warto zainstalować odpowiedni sdk do korzystania z Fusion Log Viewer. Jeśli to nie jest opcją można włączyć rejestrowanie montaż wiązania z rejestru następująco:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] 
"LogFailures"=dword:00000001 
"LogPath"="c:\\bindFailureLogs\\" 

tylko pamiętaj, aby go wyłączyć, gdy skończysz, jest kara wydajność przy użyciu rejestrowania powiązania montaż . Upewnij się, że folder istnieje przed wpisaniem klucza rejestru i uruchom ponownie pulę aplikacji aplikacji, aby rejestrowanie zostało uruchomione. Dostarczy ci to szczegółową listę tego, co dll (lub zależność, ponieważ nie zawsze jest to oczywiste, jeśli jest zależne lub biblioteka dll wymieniona w komunikacie o błędzie) nie zostało załadowane i gdzie próbowano je załadować.

Twoje partycjonowanie aplikacji naprawiających problem sugeruje, że istnieje wiele zależności na złożeniu, w których są kierowane różne wersje, a ponieważ do domeny aplikacji może być załadowana tylko jedna wersja zestawu, pewna zależność nie jest spełniona. W przypadku zarządzanych zestawów można użyć numeru assembly binding redirect, ale nie wiem, jaki byłby niezarządzalny odpowiednik tego, jeśli on istnieje.