Не мог загрузить файл или блок 'Система. Данные. SQLite'

В Java я использую (в следующем порядке):

  1. Дизайн контракта (гарантирующий предварительные условия встречены прежде, чем попробовать что-либо , который мог бы перестать работать). Это ловит большинство вещей, и я возвращаю код ошибки для этого.

  2. коды ошибок Возврата при обработке работы (и выполнении отката в случае необходимости).

  3. Исключения, но они используются только для неожиданных вещей.

123
задан pupeno 15 August 2009 в 13:31
поделиться

4 ответа

System.Data.SQLite.dll - это смешанная сборка, т. Е. Она содержит как управляемый, так и машинный код. Следовательно, конкретный System.Data.SQLite.dll является либо x86, либо x64, но никогда одновременно.

Обновление ( любезно предоставлено Дж. Пабло Фернандесом ): Cassini, веб-сервер разработки, используемый Visual Studio, когда вы нажимаете F5 или зеленую кнопку «play», работает только с x86, что означает, что даже если ваша рабочая станция x64, вы сможете использовать только x86-версию System.Data.SQLite.dll.

Альтернативой является использование не Cassini, а IIS7, который правильно x64.

119
ответ дан 24 November 2019 в 01:13
поделиться

Можете ли вы удалить папку отладки bin и снова перекомпилировать?

Или проверьте ссылку на свой проект на System.Data.SQLite ], найдите, где он находится, затем откройте dll в отражателе. Если вы не можете открыть его, это означает, что DLL повреждена, возможно, вы захотите найти правильный или переустановить .NET Framework.

0
ответ дан 24 November 2019 в 01:13
поделиться

Убедитесь, что для параметра «Включить 32-разрядные приложения» установлено значение false для пула приложений.

75
ответ дан 24 November 2019 в 01:13
поделиться

У меня 64-битная машина разработки и 32-битный сервер сборки. Я использовал этот код перед инициализацией NHibernate. Работает просто замечательно на любой архитектуре (ну, на двух, которые я тестировал)

Надеюсь, это кому-нибудь поможет.

Guido

        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";
        }
7
ответ дан 24 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: