Otrzymuję błąd „Podjęto próbę załadowania programu z niepoprawnym formatem” w projekcie replikacji programu SQL Server

318

Dokładny błąd jest następujący

Nie można załadować pliku lub zestawu „Microsoft.SqlServer.Replication, Wersja = 9.0.242.0, Kultura = neutralna, PublicKeyToken = 89845dcd8080cc91” lub jednej z jej zależności. Podjęto próbę załadowania programu o niepoprawnym formacie.

Niedawno zacząłem ponownie pracować nad tym projektem po dwumiesięcznym przejściu do innego projektu. Wcześniej działało to doskonale i dwukrotnie sprawdziłem wszystkie referencje.

łysy
źródło

Odpowiedzi:

405

Odpowiedź przez Baldy poniżej jest poprawny, ale może być konieczne, aby umożliwić aplikacji 32-bitowych w AppPool.

Źródło: http://www.alexjamesbrown.com/uncategorized/could-not-load-file-or-assembly-chilkatdotnet2-or-one-of-its-dependencies-an-attempt-was-made-to-load- program z nieprawidłowym formatem /

Podczas konfigurowania aplikacji do działania na moim komputerze lokalnym (z systemem Vista 64bit) napotkałem ten błąd:

Nie można załadować pliku lub zestawu ChilkatDotNet2ani jednej z jego zależności. Podjęto próbę załadowania programu o niepoprawnym formacie.

Oczywiście aplikacja korzysta ze składników ChilKat , ale wydaje się, że wersja, której używamy, jest tylko wersją 32-bitową.

Aby rozwiązać ten błąd, ustawiam pulę aplikacji w usługach IIS, aby umożliwić aplikacjom 32-bitowym. Otwórz Menedżera usług IIS, kliknij pulę aplikacji prawym przyciskiem myszy i wybierz Ustawienia zaawansowane (patrz poniżej)

wprowadź opis zdjęcia tutaj

Następnie ustaw „Włącz aplikacje 32-bitowe” na Prawda.

wprowadź opis zdjęcia tutaj

Wszystko gotowe!

bboyle1234
źródło
Czy spowodowałoby to, że cała pula aplikacji działałaby jako 32-bitowa, a nie pełna 64-bitowa? Czy ponowne skompilowanie zależności dla 64-bitowych / wszystkich platform byłoby lepszym rozwiązaniem? Mam ten problem z powodu NFOP, ale ponieważ jest to oprogramowanie typu open source, mogłem go ponownie skompilować.
jamiebarrow 18.01.11
2
Link nie działa, ale twoje wyjaśnienie wystarczyło, aby rozwiązać mój problem. +1
Andrew Shepherd
Link z instrukcjami, jak włączyć 32-bitowe aplikacje: blogs.msdn.com/b/rakkimk/archive/2007/11/03/…
Brandon S
15
Warto zauważyć, że to rozwiązanie AppPool dotyczy tylko aplikacji ASP.NET - może pomylić niektórych programistów, którzy nigdy nie używali / nie konfigurowali ASP.NET lub IIS.
galaktor
nie naprawia tego w IIS7 tylko w IIS7.5
FlavorScape
120

Znalazłem rozwiązanie. Niedawno zaktualizowałem swój komputer do wersji Windows 2008 Server 64-bit. Przestrzeń nazw SqlServer.Replication została napisana dla platform 32-bitowych. Wszystko, co musiałem zrobić, aby ponownie uruchomić, to ustawić Platformę docelową we właściwościach kompilacji projektu na X86.

łysy
źródło
Mam ten problem z biblioteką DLL, ale mój projekt> Właściwości HDP ... nie ma zakładki „Kompilacja” (pozornie wszystko, ale nie to). Zarówno karty Kompiluj, jak i Debuguj mają menu rozwijane „Platforma”, ale w obu przypadkach jedynym menu rozwijanym jest „Aktywny (dowolny procesor)”.
B. Clay Shannon
Zdarzyło mi się odwrócić powyższy problem. Miałem wszystko działające w wersji 64-bitowej, a moim celem kompilacji był Dowolny procesor. Gdy zmieniłem to na 64-bitowe, działało to doskonale :)
Madhurya Gandi,
87

Zmień wartość parametru Target platformy na stronie właściwości projektu internetowego na Any CPU.

wprowadź opis zdjęcia tutaj

p.campbell
źródło
Niestety nie ma żadnego efektu.
Jonathan
4
Myliłem się - zadziałało, gdy pozbyłem się wszystkich folderów „bin”. Dzięki!
Jonathan
Naprawiłem również mój problem, ale dopiero po wykonaniu tego dla KAŻDEGO projektu w moim rozwiązaniu. Wymienione kroki dotyczą projektów w języku C #. W przypadku projektów VB.NET zmień Właściwości projektu> Kompiluj> Zaawansowane opcje kompilacji> Docelowy procesor na „AnyCPU”
Francois Botha
6
W moim przypadku projekt był już ukierunkowany na „Dowolny procesor”. Ale korzystam z 64-bitowego systemu Windows i próbowałem DllImport oldschoolowego sterownika sprzętowego. Naprawdę zmieniłem cel na x86.
bsegraves
W moim przypadku chciałem uruchomić pod x64. To nie działało. Po zmianie wszystkich rekomendacji musiałem również zmienić „Bitness” w sieci również na x64
SKCS Kamal
52

Przejdź do IIS -> Pula aplikacji -> Ustawienia zaawansowane -> Włącz aplikacje 32-bitowe

Harpal
źródło
Clay, jakiej wersji IIS używasz?
Harpal
23

Niedawno wystąpił problem podczas próby uruchomienia kodu z programu Visual Studio. W takim przypadku musisz wykonać
NARZĘDZIA> OPCJE> Projekty i rozwiązania> PROJEKTY SIECIOWE i zaznaczyć opcję „Używaj 64-bitowej wersji IIS Express do witryn i projektów”.

Justin
źródło
1
To ostatecznie dla mnie zadziałało. Szczególnie dla osób próbujących debugować interfejs API sieci Web za pomocą bibliotek usługi Service Fabric !!! Jeśli używasz bibliotek DLL usługi Service Fabric w swoim projekcie, upewnij się, że korzystasz z powyższego rozwiązania.
Chris Dutra
To jest jedyne rozwiązanie, które działało dla mnie. Dzięki. : D
Jeremy Styers
Pracuj też dla mnie!
Cếù Hiếu
11

Dla tych, którzy dostają ten błąd w projekcie ASP.NET MVC 3 , w samym Visual Studio:

W aplikacji ASP.NET MVC 3, nad którą pracuję, próbowałem dodać odwołanie do Microsoft.SqlServer.BatchParser do projektu, aby rozwiązać problem, którego brakowało na serwerze wdrażania. (Nasza aplikacja korzysta z SMO; poprawną poprawką było zainstalowanie SQL Server Native Client i kilka innych rzeczy na serwerze wdrażania).

Nawet po usunięciu odwołania do BatchParser ciągle pojawiał się błąd „Podjęto próbę ...”, odwołując się do BatchParser DLL, na każdej stronie ASP.NET MVC 3, którą otworzyłem, a po tym błędzie nastąpiło kilkadziesiąt parsowania stron błędy.

Jeśli tak się stanie, przeszukaj plik i sprawdź, czy biblioteka DLL nadal znajduje się w jednym z folderów \ bin projektu. Nawet jeśli przeprowadzisz przebudowę, Visual Studio niekoniecznie wyczyści wszystko we wszystkich folderach \ bin. Kiedy usunąłem DLL z kosza i zbudowałem ponownie, błąd zniknął.

Ryan Lundy
źródło
Właśnie wykonałem przebudowę i problem zniknął bez konieczności ręcznego usuwania biblioteki DLL. Dzięki!
Trevor,
4

Miałem to w aplikacji MVC5 w systemie Windows 10 przeciwko IIS Express. Moje rozwiązanie było następujące:

  • Narzędzia =>
    • Opcje =>
      • Projekty i rozwiązania =>
        • Projekty internetowe =>
          • Użyj 64-bitowej wersji IIS Express dla stron internetowych i projektów
krillgar
źródło
3

zmień na 32-bitowy (prawda) to działa

jeśli otrzymasz tę długość, nie może być mniejsza niż zero. Nazwa parametru: problem z długością w konfiguracji serwera iis. Zrób prostą rzecz: zmień parametry połączenia w pliku web.config, takie jak nazwa serwera SQL i nazwa serwera, i zrestartuj iis, a następnie spróbuj załadować stronę, na której działa.

Munwar Shaiik
źródło
2

Jeśli podczas publikowania w programie Visual Studio 2012, gdy wystąpi błąd, usuń zaznaczenie opcji „Przetwarzaj podczas publikowania” w kreatorze Publikuj.

Odznacz „Prekompiluj podczas publikacji”

SushiGuy
źródło
0

robię to w aplikacji formularza Windows, kliknij prawym przyciskiem myszy pole wyboru Projekt-> Właściwości-> Kompilacja-> Sprawdź Preferuj 32-bit. Dziękuje wszystkim

Amirhossein Yari
źródło
0
  1. Usuń katalog testu temp znajdujący się tutaj C: \ Users (User) \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \

  2. Ustaw wszystkie projekty na x64 w Visual Studio

  3. Ustaw domyślną architekturę procesora na x64 (Test / TestSettings / Default Processor Architecture).

Pamiętaj, aby wyczyścić kompilację pliku rozwiązania. Mam nadzieję, że to pomoże!

Madhurya Gandi
źródło
0

Dla mnie działała zmiana struktury docelowej we właściwościach projektu z .NET Framework 4.7.1 na 4.6.2.

Sussexrick
źródło