Приложение MVC3 - получение «Не удалось загрузить файл или сборку« System.Data.SQLite »или одну из ее зависимостей». - PullRequest
3 голосов
/ 05 декабря 2011

Проблема:

Я создаю AC # 4.0, веб-приложение на основе MVC 3.Я использую SQLite в качестве базы данных.

Когда я запускаю приложение, я получаю эту ошибку:

Не удалось загрузить файл или сборку 'System.Data.SQLite' или одну из ее зависимостей,Была предпринята попытка загрузить программу с неверным форматом.

Это трассировка загрузки сборки Fusion:

=== Pre-bind state information ===
LOG: User = Steve-PC\Steve
LOG: DisplayName = System.Data.SQLite
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: System.Data.SQLite | Domain ID: 2
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///C:/Users/Steve/Documents/Visual Studio 2010/Projects/EMMA3/EMMA_Web/
LOG: Initial PrivatePath = C:\Users\Steve\Documents\Visual Studio 2010\Projects\EMMA3\EMMA_Web\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\Steve\Documents\Visual Studio 2010\Projects\EMMA3\EMMA_Web\web.config
LOG: Using host configuration file: C:\Users\Steve\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Users/Steve/AppData/Local/Temp/Temporary ASP.NET Files/root/6454c2d1/d37faccb/System.Data.SQLite.DLL.
LOG: Attempting download of new URL file:///C:/Users/Steve/AppData/Local/Temp/Temporary ASP.NET     Files/root/6454c2d1/d37faccb/System.Data.SQLite/System.Data.SQLite.DLL.
LOG: Attempting download of new URL file:///C:/Users/Steve/Documents/Visual Studio 2010/Projects/EMMA3/EMMA_Web/bin/System.Data.SQLite.DLL.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

Я использую:

Windows 7 x64 Visual Web Developer 2010 IIS Express 7.5 System.Data.SQLite x64 1.0.77.0

Я много гуглил, и общая мысль, похоже, связана с выполнением 32-битнойсборка в 64-битной системе или наоборот.

То, что я пробовал:

  1. Переключиться на IIS Express со встроенного веб-сервера VS.Очевидно, что встроенный сервер может работать только с 32-битными приложениями, а IIS Express может выполнять и то, и другое.Без изменений.
  2. Убедитесь, что вы используете 64-битную версию SQLite.Первоначально я использовал обычную версию, но переход на 64-разрядную версию, похоже, не помог.
  3. Включите параметр «32-разрядное приложение на win 64» в IIS.(В IIS Express это делается с помощью appcmd.exe - appcmd set apppool /apppool.name: "" / enable32bitapponwin64: true).Опять же, это не изменилось.
  4. Удалите / переустановите Sqlite.Без изменений.
  5. Создайте более простую версию проекта, чтобы убедиться, что все чисто и сузить причину.Это привело меня к «шагам воспроизведения» ниже, но на самом деле не помогло мне.

Шаги для воспроизведения:

  1. Создать новый MVC3. Веб-проект.
  2. Запустите его и убедитесь, что он работает.
  3. Используйте Nuget, чтобы добавить ссылку на SQLite x64.
  4. Запустите сайт еще раз, и он выдаст эту ошибку.

Итак, в заключение - я получаю сообщение об ошибке выше, это определенно связано с SQLite, у меня все 64-битное, но все равно не работает.Есть идеи?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 мая 2012

Если вы получаете эту ошибку при попытке запустить веб-приложение из VisualStudio, то это потому, что встроенный веб-сервер является только 32-разрядным.Если вы хотите отлаживать / запускать с 64-битной версией VisualStudio, ознакомьтесь с проектом Cassini.Есть инструкция по созданию 64-битной версии cassini и ее использованию вместо стандартного веб-сервера VisualStudio.

1 голос
/ 08 декабря 2011

Понял это некоторое время назад и забыл об этом вопросе.

Ответ состоял в том, чтобы удалить SQLite x64 и установить SQLite x86 ... Просто так. Кажется странным, когда я собираю 64-битную сборку на 64-битной версии Windows, но мы идем. Библиотеки классов, которые фактически имеют логику доступа к данным, все еще ссылаются на 64-битную версию SQLite, но по какой-то причине реальный веб-проект должен ссылаться на 32-битную версию.

...