Я установил ELMAH 1.1 .Net 3.5 x64 в свой проект ASP.NET и теперь получаю эту ошибку (всякий раз, когда я пытаюсь просмотреть любую страницу):
Не удалось загрузить файл или сборку System.Data.SQLite, Version = 1.0.61.0, Culture = нейтральный, PublicKeyToken = db937bc2d44ff139 или одну из ее зависимостей. Была сделана попытка загрузить программу с неправильным форматом.
Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.
Сведения об исключении: System.BadImageFormatException: не удалось загрузить файл или сборку System.Data.SQLite, Version = 1.0.61.0, Culture = нейтральный, PublicKeyToken = db937bc2d44ff139 или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом.
Подробнее об ошибке внизу.
Моя платформа активного решения - «Любой процессор», и я работаю на x64 Windows 7 на x64, конечно же, процессоре. Причина, по которой мы используем эту версию ELMAH, заключается в том, что 1.0 .Net 3.5 (x86, которая является единственной платформой, для которой она скомпилирована) дала нам ту же ошибку на нашем сервере x64 Windows.
Я пробовал компилировать для x86 и x64 и получаю ту же ошибку. Я попытался удалить весь вывод компилятора (bin и obj). Наконец, я сделал ссылку непосредственно на SQLite dll, что-то, что не было необходимо для работы проекта на сервере, и у меня есть эта ошибка компилятора:
Ошибка 1 Предупреждение как ошибка: создание сборки - сборка, на которую указывает ссылка System.Data.SQLite.dll, предназначена для другого процессора MyProject
Есть идеи, в чем может быть проблема?
Дополнительные сведения об ошибке:
Ошибка источника:
Во время выполнения текущего веб-запроса возникло необработанное исключение. Информацию о происхождении и местонахождении исключения можно определить с помощью трассировки стека исключений ниже.
Трассировки стека:
[BadImageFormatException: не удалось загрузить файл или сборку System.Data.SQLite, Version = 1.0.61.0, Culture = нейтральный, PublicKeyToken = db937bc2d44ff139 или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом.]
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 дляIntrospection) +127 System.Reflection.Assembly.InternalLoad (String assemblyString, Evidence assemblySecurity, StackCrawlMark & stackMark). Загрузить (String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +46[ConfigurationErrorsException: не удалось загрузить файл или сборку System.Data.SQLite, Version = 1.0.61.0, Culture = нейтральный, PublicKeyToken = db937bc2d44ff139 или одну из их зависимостей. Была сделана попытка загрузить программу с неправильным форматом.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 System.Web. .CompilationSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean supportLocalizationName, String) вывод +
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.BuildManager.EnsureTopLevel () +337Compiled[HttpException (0x80004005): не удалось загрузить файл или сборку System.Data.SQLite, Version = 1.0.61.0, Culture = нейтральный, PublicKeyToken = db937bc2d44ff139 или одну из его зависимостей. Была сделана попытка загрузить программу с неверным форматом.]
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): не удалось загрузить файл или сборку System.Data.SQLite, Version = 1.0.61.0, Culture = нейтральный, PublicKeyToken = db937bc2d44ff139 или одну из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом.]
System.Web.HttpRuntime.FirstRequestInit (контекст HttpContext) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (контекст HttpContext) +85
System.Web.HttpRuntime.ProcessRequestInit (HttpRuntime.ProcessRequestInit ) +259
Ответы:
System.Data.SQLite.dll
представляет собой смешанную сборку, т. е. содержит как управляемый код, так и собственный код. Следовательно, этоSystem.Data.SQLite.dll
либо x86, либо x64, но не оба сразу.Обновление ( любезно предоставлено Дж. Пабло Фернандесом ): Cassini, веб-сервер разработки, используемый Visual Studio, когда вы нажимаете F5 или зеленую кнопку «воспроизведение», является только x86, что означает, что даже если ваша рабочая станция x64, вы будете только может использовать x86-версию System.Data.SQLite.dll.
Альтернативой является использование не Cassini, а IIS7, который правильно x64.
источник
Убедитесь, что для пула приложений установлено значение «Включить 32-разрядные приложения».
источник
Перейти к
IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.источник
Это очень просто, если вы не используете SQLite:
Вы можете удалить библиотеки DLL SQLite из папок bin вашего решения, а затем из папки, в которой вы ссылаетесь на ELMAH. Перестройте, и ваше приложение не будет пытаться загрузить эту DLL, которую вы не используете.
источник
У меня есть 64-битная машина для разработки и 32-битный сервер сборки. Я использовал этот код до инициализации NHibernate. Прекрасно работает на любой архитектуре (ну 2, которые я тестировал)
Надеюсь, это кому-то поможет.
Guido
источник
В нашем случае не сработало, потому что на нашем производственном сервере отсутствует
Распространяемый пакет Microsoft Visual C ++ 2010 SP1 (x86)
Мы его установили и все работает нормально. В пуле приложений должно быть установлено значение «Включить 32-разрядные приложения», и вы должны использовать версию библиотеки x86.
источник
Как человеку, которому приходилось иметь дело с довольно большим количеством отчетов об ошибках на Roadkill Wiki с точно такой же проблемой, вам нужно сделать следующее:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
Это настоящая боль в заднице, через сколько обручей вам нужно перепрыгнуть при повторном распространении двоичных файлов SQLite .NET, мое решение для Roadkill в конечном итоге заключалось в том, чтобы скопировать правильные двоичные файлы в папку ~ / bin на основе архитектуры, которую вы используете , К сожалению, это не решает проблему времени выполнения C ++.
источник
Я решил это, установив System.Data.SQLite с расширением Nuget. Это расширение можно использовать для Visual Studio 2010 или выше. Во-первых, вам нужно установить расширение Nuget. Вы можете следить здесь:
Во-вторых, теперь вы можете установить SQLite:
И теперь вы можете использовать System.Data.SQLite.
В этом случае вы видите две папки x64 и x86, эти папки содержат SQLite.Interop.dll. Теперь перейдите в окна свойств этих dll и установите действие сборки - это содержимое, а Копировать в выходной каталог - всегда копировать.
Итак, это мой путь.
Спасибо. Ким Тхо Фам, Хошимин, Вьетнам. Почта: tho.phamkim@gmail.com
источник
Связанная с ручной загрузкой сборка System.Data.SQLite может решить эту проблему.
Изменен код gatapia, как показано ниже:
источник
Я получил эту ошибку, когда наш сервер Windows был преобразован с 32-битной ОС на 64-битную. Сборка, которая выдавала ошибку, была настроена на компиляцию в режиме x86 (то есть в режиме 32). Я переключил его на «Любой процессор», и это помогло. Вы можете изменить это значение, выполнив следующие действия:
щелкните правой кнопкой мыши проект и перейдите в
Properties -> Build -> Platform Target -> change to "Any CPU"
источник
Как ни странно, я решил эту проблему, установив System.Data.SQLite через приложение Nuget GUI, а не через консоль диспетчера пакетов.
Установка через консоль не включала зависимости, необходимые для запуска этой библиотеки.
источник
System.Data.SQLite
имеет зависимость отSystem.Data.SQLite.interop
того, чтобы оба пакета были одной и той же версии и оба были x86 .Это старый вопрос, но я пробовал все вышеперечисленное. Я работал строго над проектом x86 , поэтому не было двух папок / x86, / x64. Но по какой-то причине это
System.Data.SQLite
была другая версияSystem.Data.SQLite.interop
, как только я вытащил соответствующие DLL, проблема была исправлена.источник
Я придумал 2 быстрых решения. Либо работать на меня. Думаю проблема в разрешениях.
1) Вместо файла Elmah.dll из каталога net-2.0 я использовал Elmah.dll из net-1.1.
2) Вместо хранения Elmah.dll в каталоге bin проекта. Я создаю каталог dll, чтобы поместить его.
источник
Другой способ обойти это - просто обновить ваше приложение до ELMAH 1.2, а не до 1.1.
источник
Можете ли вы удалить папку отладки bin и снова перекомпилировать?
Или проверьте ссылку на ваш проект, найдите
System.Data.SQLite
, где он находится, затем откройте DLL в отражателе. Если вы не можете открыть его, это означает, что DLL повреждена, возможно, вы захотите найти правильный или переустановить .NET Framework.источник
Если вы используете IIS Express в качестве веб-сервера на своей машине разработки, я бы выбрал локальный IIS. Это сработало для меня.
источник
Это старый пост, но он может помочь некоторым людям, ищущим эту ошибку, попробовать установить для параметра «Включить 32-разрядные приложения» значение True для пула приложений. Это то, что разрешило ошибку для меня. Я пришел к этому решению, прочитав некоторые комментарии к ответу @beckelmw.
источник
Вероятно, у вас установлен не тот пакет. Вам нужен пакет, созданный Microsoft, который реализует модель поставщика System.Data.Common.
источник