В Java я использую (в следующем порядке):
Дизайн контракта (гарантирующий предварительные условия встречены прежде, чем попробовать что-либо , который мог бы перестать работать). Это ловит большинство вещей, и я возвращаю код ошибки для этого.
коды ошибок Возврата при обработке работы (и выполнении отката в случае необходимости).
Исключения, но они используются только для неожиданных вещей.
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.
Можете ли вы удалить папку отладки bin и снова перекомпилировать?
Или проверьте ссылку на свой проект на System.Data.SQLite
], найдите, где он находится, затем откройте dll в отражателе. Если вы не можете открыть его, это означает, что DLL повреждена, возможно, вы захотите найти правильный или переустановить .NET Framework.
Убедитесь, что для параметра «Включить 32-разрядные приложения» установлено значение false для пула приложений.
У меня 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";
}