Не удалось загрузить файл или сборку «System.Data.SQLite»
https://stackoverflow.com/questions/1278929
Full question
вопрос
<Р> Не удалось загрузить файл или сборку «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, и я получаю ту же ошибку. Я попытался удалить Выдавать компилятор (бен и объект). Наконец я сделал ссылку на 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 имя_файла, String CodeBase, Evidence assemblySecurity, Ассамблея locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly.nLoad (AssemblyName имя_файла, String CodeBase, Evidence assemblySecurity, Ассамблея locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
System.Reflection.Assembly.InternalLoad (AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & stackMark, булева forIntrospection) +127 System.Reflection.Assembly.InternalLoad (String assemblyString, Evidence assemblySecurity, StackCrawlMark & stackMark, булева forIntrospection) +142 System.Reflection.Assembly.Load (String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String AssemblyName, булева starDirective) +46 <Р> [ConfigurationErrorsException: Могли не загрузить файл или сборку «System.Data.SQLite, Version = 1.0.61.0, Culture = нейтрально, PublicKeyToken = db937bc2d44ff139' или один из его зависимостей. Попытка было сделано, чтобы загрузить программу с неверный формат.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String AssemblyName, булева starDirective) +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 System.Web.Configuration.CompilationSection.LoadAssembly (AssemblyInfo аи) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () +337 р> <Р> [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.ProcessRequestInternal (HttpWorkerRequest иг) +259 р>
Решение
System.Data.SQLite.dll
представляет собой смешанные сборки, то есть он содержит как управляемый код и машинный код. Поэтому конкретный System.Data.SQLite.dll
либо x86 или x64, но не оба. Р>
<сильный> Update ( любезно J. Pablo Fernandez ): Кассини, веб-сервер разработки используется Visual Studio при нажатии клавиши F5 или нажмите зеленую «Play» кнопку, является x86 только что означает, что даже если ваша рабочая станция x64, вы будете в состоянии использовать x86 версию System.Data.SQLite.dll.
<Р> Альтернативным не использовать Кассини, но IIS7, который должным образом 64. Р>ДРУГИЕ СОВЕТЫ
<Р> Убедитесь, что «Enable 32 - битных приложений». Устанавливается в ложь для пула приложений
<Р> Перейти к IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.
<Р> Это очень просто, если вы не используете SQLite:
<Р> Вы можете удалить SQLite библиотеки DLL из бин папки вашего решения, а затем из папки, где вы ссылаетесь ELMAH. Перестройка, и ваше приложение не будет пытаться загрузить этот DLL, которые вы не используете.<Р> У меня есть 64-битный Dev машина и 32-битный сервер сборки. Я использовал этот код до начала NHibernate инициализации. Работает очарование на любой архитектуре (ну 2 я проверял)
<Р> Надеюсь, что это поможет кому-то. <Р> Гвидо р> private static void LoadSQLLiteAssembly()
{
Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
FileInfo fi = new FileInfo(dir.AbsolutePath);
string binFile = fi.Directory.FullName + "\\System.Data.SQLite.DLL";
if (!File.Exists(binFile)) File.Copy(GetAppropriateSQLLiteAssembly(), binFile, false);
}
private static string GetAppropriateSQLLiteAssembly()
{
string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
return GetLibsDir() + "\\NUnit\\System.Data.SQLite.x" + arch + ".DLL";
}
<Р> Как кто-то, кто имел дело с довольно много сообщений об ошибках Roadkill Wiki с точно такой же вопрос, это то, что вам нужно сделать следующее:
- Вы используете x64 или x86? Sqlite поставляется с DLL, для отдельных архитектур - скопировать право один в папку BIN, есть два DLLS для официального поставщика:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
- Если вы не можете быть обеспокоены охоты вокруг этих сборок, включите 32 битный режим для пула приложений (решение для Дев машин только обычно)
- Если вы размещаете на сервере, вам нужно распространяемый Microsoft C ++ времени выполнения - он не установлен на Server 2008 R2 по умолчанию. x64 версия , x86 версия
<Р> Я решил это путем установки System.Data.SQLite с расширением NuGet. Это расширение можно использовать для Visual Studio 2010 или выше. Во-первых, необходимо установить расширение NuGet. Вы можете следить здесь:
- Перейдите в Visual Studio 2010, Меню -> Инструменты
- Выберите Диспетчер Extension
- Введите NuGet в поле поиска и нажмите кнопку Online Gallery. Ожидание этого Получения информации о ...
- Выберите извлеченную NuGet Package Manager, нажмите кнопку Загрузить. Ожидание это Загрузка ...
- Нажмите кнопку Установить на зрительную менеджера студии Extension Installer NuGet пакета. Дождитесь окончания установки.
- Нажмите кнопку Закрыть и «Restart Now.
- Перейдите в меню Сервис-> Библиотека Пакет Manager-> Package Manager Console в Visual Studio.
- Затем выполните команду Install-Package System.Data.SQLite в Package Manager Console. Нравится: выполните команду Install-Package System.Data.SQLite в Package Manager Console
<Р> Руководство, связанные с нагрузкой System.Data.SQLite сборка может решить эту проблему.
<Р> Изменено gatapia код с, как показано ниже: public static void LoadSQLLiteAssembly()
{
Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
FileInfo fi = new FileInfo(dir.AbsolutePath);
string appropriateFile = Path.Combine(fi.Directory.FullName, GetAppropriateSQLLiteAssembly());
Assembly.LoadFrom(appropriateFile);
}
private static string GetAppropriateSQLLiteAssembly()
{
string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
return "System.Data.SQLite.x" + arch + ".DLL";
}
<Р> Я получил эту ошибку, когда наш сервер окна был преобразован из 32-битных ОС до 64 бит. Сборки, которая бросает ошибку была установлена для компиляции в режиме x86 (то есть 32 режим). Я включил его в «Any CPU» и что сделал трюк. Вы можете изменить это значение, выполнив следующие действия:
<Р> правой кнопкой мыши по проекту идут вProperties -> Build -> Platform Target -> change to "Any CPU"
<Р> В нашем случае не работает, потому что наша продукция сервер отсутствует
<Р> Я решил это, как ни странно, установив System.Data.SQLite через приложение NuGet GUI, в отличие от консоли менеджера пакетов.
<Р> Установка с помощью консоли не включают зависимостей эта библиотека должна работать.<Р> Я пришел с 2 быстрых решений. Либо работать для меня. Я думаю, что проблема из-за разрешения.
<Р> 1) Вместо того, чтобы использовать файл Elmah.dll из сетчатой 2,0 каталога, я использовал Elmah.dll из нетто-1.1. <Р> 2) Вместо того чтобы держать Elmah.dll в директории проекта бен. Я делаю каталог DLL, чтобы поместить его.<Р> Другой способ обойти это просто обновить приложение Elmah 1.2, а не 1.1.
<Р> System.Data.SQLite
имеет зависимость от System.Data.SQLite.interop
убедитесь, что оба пакета являются той же версии и оба x86 .
System.Data.SQLite
была другая версия для System.Data.SQLite.interop
, когда я потянул вниз соответствие DLLs проблема была зафиксирована.
Можно ли удалить папку бин отладки и перекомпилировать снова?
<Р> Или проверить ссылку на проект наSystem.Data.SQLite
, выследить, где он находится, а затем откройте DLL в отражателе. Если вы не можете открыть его, что означает, что длл поврежден, вы можете найти правильный или переустановить рамки .net. Р>
<Р> Если вы используете IIS Express в качестве веб-сервера на вашей машине, я изменил бы на местном IIS. Это работает для меня.
<Р> Это старый пост, но это может помочь некоторым людям поиска на этой ошибке попытаться установить «Enable 32-битные приложения» Истину для пула приложений. Это то, что ошибка устранена для меня. Я пришел на это решение, читая некоторые комментарии к @ beckelmw Ответим.
<Р> Вы, вероятно, имеют неправильный установленный пакет. Вы хотите, чтобы пакет, полученный с помощью Microsoft который реализует System.Data.Common поставщик модель. р>