Zainstalowałem ELMAH 1.1 .Net 3.5 x64 w moim projekcie ASP.NET i teraz pojawia się ten błąd (za każdym razem, gdy próbuję wyświetlić dowolną stronę):
Nie można załadować pliku lub zestawu „System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.
Opis: wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania internetowego. Zapoznaj się ze śledzeniem stosu, aby uzyskać więcej informacji na temat błędu i miejsca jego powstania w kodzie.
Szczegóły wyjątku: System.BadImageFormatException: nie można załadować pliku lub zestawu „System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.
Więcej informacji o błędach na dole.
Moja platforma Active Solution to "Dowolny procesor" i pracuję na x64 Windows 7 na procesorze x64, oczywiście. Powodem, dla którego używamy tej wersji ELMAH, jest to, że 1.0 .Net 3.5 (x86, który jest jedyną platformą, dla której jest skompilowany) dał nam ten sam błąd na naszym serwerze x64 Windows.
Próbowałem kompilować dla x86 i x64 i otrzymuję ten sam błąd. Próbowałem usunąć wszystkie dane wyjściowe kompilatora (bin i obj). Wreszcie odniosłem się bezpośrednio do biblioteki dll SQLite, coś, co nie było potrzebne, aby projekt działał na serwerze i otrzymałem ten błąd kompilatora:
Błąd 1 Ostrzeżenie jako błąd: Generowanie zestawu - zestaw, do którego odwołuje się „System.Data.SQLite.dll”, jest przeznaczony dla innego procesora MyProject
Jakieś pomysły na czym może polegać problem?
Więcej informacji o błędzie:
Błąd źródła:
Podczas wykonywania bieżącego żądania internetowego został wygenerowany nieobsługiwany wyjątek. Informacje dotyczące pochodzenia i lokalizacji wyjątku można zidentyfikować za pomocą poniższego śladu stosu wyjątków.
Ślad stosu:
[BadImageFormatException: nie można załadować pliku lub zestawu „System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139” lub jednej z jego zależności. Podjęto próbę załadowania programu w nieprawidłowym formacie.]
System.Reflection.Assembly._nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection. .nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
System.Reflection.Assembly.InternalLoad (AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & stackMark, Boolean forIntrospection) +127 System.Reflection.Assembly.InternalLoad (String assemblyString, Evidence assemblySecurity, StackeanCrawlRospection & stackMark. +2. Load (String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +46[ConfigurationErrorsException: nie można załadować pliku lub zestawu „System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 System.Web.Configuration .CompilationSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean supportLocalization, String, String)
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.[HttpException (0x80004005): nie można załadować pliku lub zestawu „System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException () +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () +512 System.Web.Hosting.HostingEnvironment.Initialize ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +729[HttpException (0x80004005): nie można załadować pliku lub zestawu „System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139” lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie.]
System.Web.HttpRuntime.FirstRequestInit (kontekst HttpContext) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (kontekst HttpContext) +85
System.Web.HttpRuntime.ProcessRttpequest ) +259
Odpowiedzi:
System.Data.SQLite.dll
jest zestawem mieszanym, tzn. zawiera zarówno kod zarządzany, jak i kod natywny. Dlatego konkretny elementSystem.Data.SQLite.dll
to x86 lub x64, ale nigdy oba.Aktualizacja ( dzięki uprzejmości J. Pablo Fernandeza ): Cassini, programistyczny serwer sieciowy używany przez Visual Studio po naciśnięciu klawisza F5 lub kliknięciu zielonego przycisku «odtwarzanie», to tylko x86, co oznacza, że nawet jeśli twoja stacja robocza jest x64, będziesz w stanie korzystać z wersji System.Data.SQLite.dll x86.
Alternatywą jest nie użycie Cassini, ale IIS7, który jest poprawnie x64.
źródło
Upewnij się, że opcja „Włącz aplikacje 32-bitowe” jest ustawiona na wartość fałsz dla puli aplikacji.
źródło
Przejdź do
IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.źródło
Jest to bardzo proste, jeśli nie używasz SQLite:
Możesz usunąć biblioteki DLL SQLite z folderów bin rozwiązania, a następnie z folderu, w którym odwołujesz się do ELMAH. Przebuduj, a Twoja aplikacja nie będzie próbowała załadować tej biblioteki DLL, której nie używasz.
źródło
Mam 64-bitową maszynę deweloperską i 32-bitowy serwer kompilacji. Użyłem tego kodu przed inicjalizacją NHibernate. Działa urok na każdej architekturze (dobrze 2, które testowałem)
Mam nadzieję, że to komuś pomoże.
Guido
źródło
W naszym przypadku nie zadziałało, ponieważ brakuje naszego serwera produkcyjnego
Pakiet redystrybucyjny programu Microsoft Visual C ++ 2010 SP1 (x86)
Zainstalowaliśmy go i wszystko działa dobrze. Pula aplikacji musi mieć ustawienie Włącz aplikacje 32-bitowe na wartość true i musisz mieć wersję biblioteki x86
źródło
Jako ktoś, kto miał do czynienia z kilkoma raportami błędów na Roadkill Wiki z dokładnie tym samym problemem, oto co musisz zrobić:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
To prawdziwy ból w dupie, ile razy musisz przeskoczyć podczas ponownej dystrybucji plików binarnych SQLite .NET, moim rozwiązaniem dla Roadkill było skopiowanie poprawnych plików binarnych do folderu ~ / bin w oparciu o architekturę, której używasz . Niestety to nie rozwiązuje problemu z uruchomieniem C ++.
źródło
Rozwiązałem to, instalując System.Data.SQLite z rozszerzeniem Nuget. To rozszerzenie może być używane w programie Visual Studio 2010 lub nowszym. Najpierw musisz zainstalować rozszerzenie Nuget. Możesz śledzić tutaj:
Po drugie, możesz teraz zainstalować SQLite:
A teraz możesz użyć System.Data.SQLite.
W tym przypadku zobaczysz dwa foldery x64 i x86, te foldery zawierają SQLite.Interop.dll. Teraz przejdź do okien właściwości tych bibliotek dll i ustaw akcję kompilacji na zawartość, a Kopiuj do katalogu wyjściowego to Kopiuj zawsze.
Więc to moja droga.
Dzięki. Kim Tho Pham, HoChiMinh City, Wietnam. E-mail: [email protected]
źródło
Ręczne ładowanie związane z zestawem System.Data.SQLite może rozwiązać ten problem.
Zmieniono kod gatapia, jak poniżej:
źródło
Otrzymałem ten błąd, gdy nasz serwer Windows został przekonwertowany z 32-bitowego systemu operacyjnego na 64-bitowy. Zestaw, który generował błąd, został ustawiony na kompilację w trybie x86 (tj. W trybie 32). Przełączyłem go na „Any CPU” i to załatwiło sprawę. Możesz zmienić tę wartość, wykonując następujące czynności:
kliknij prawym przyciskiem myszy projekt i przejdź do
Properties -> Build -> Platform Target -> change to "Any CPU"
źródło
Rozwiązałem to, co dziwne, instalując System.Data.SQLite za pośrednictwem aplikacji Nuget GUI, w przeciwieństwie do konsoli menedżera pakietów.
Instalacja za pośrednictwem konsoli nie obejmuje zależności, które ta biblioteka musi uruchomić.
źródło
System.Data.SQLite
ma zależność odSystem.Data.SQLite.interop
upewnij się, że oba pakiety są w tej samej wersji i są x86 .To stare pytanie, ale wypróbowałem wszystkie powyższe. Pracowałem nad projektem ściśle x86 , więc nie było dwóch folderów / x86, / x64. Ale z jakiegoś powodu
System.Data.SQLite
była to inna wersja niżSystem.Data.SQLite.interop
, gdy ściągnąłem pasujące biblioteki DLL, problem został naprawiony.źródło
Wymyśliłem 2 szybkie rozwiązania. Albo pracuj dla mnie. Myślę, że problem wynika z uprawnień.
1) Zamiast używać pliku Elmah.dll z katalogu net-2.0, użyłem Elmah.dll z net-1.1.
2) Zamiast przechowywać Elmah.dll w katalogu bin projektu. Tworzę katalog dll, aby go umieścić.
źródło
Innym sposobem obejścia tego problemu jest po prostu uaktualnienie aplikacji do ELMAH 1.2 zamiast 1.1.
źródło
Czy możesz usunąć folder bin debug i ponownie skompilować?
Lub sprawdź odniesienie projektu do
System.Data.SQLite
pliku, wyśledź, gdzie się znajduje, a następnie otwórz dll w reflektorze. Jeśli nie możesz go otworzyć, oznacza to, że dll jest uszkodzony, możesz znaleźć poprawną lub ponownie zainstalować framework .net.źródło
Jeśli używasz IIS Express jako serwera WWW na swoim komputerze deweloperskim, zmieniłbym na Lokalne IIS. To zadziałało dla mnie.
źródło
To jest stary post, ale niektórym osobom szukającym informacji o tym błędzie może pomóc ustawienie opcji „Włącz aplikacje 32-bitowe” na wartość True dla puli aplikacji. To właśnie rozwiązało problem za mnie. Na to rozwiązanie natknąłem się, czytając komentarze do odpowiedzi @ beckelmw.
źródło
Prawdopodobnie masz zainstalowany zły pakiet. Potrzebujesz pakietu wyprodukowanego przez firmę Microsoft, który implementuje model dostawcy System.Data.Common.
źródło