C# Windows SQLite集成测试清理(“无法打开数据库文件”)

C# Windows SQLite集成测试清理(“无法打开数据库文件”),c#,sqlite,unit-testing,azure-mobile-services,C#,Sqlite,Unit Testing,Azure Mobile Services,我为现有的SQLite应用程序添加了2个C#集成测试。每个测试都会创建一个数据库文件(使用Guid来保证唯一性),并对数据库执行一些操作。测试单独通过,但如果一个接一个地运行,则会失败。第二个测试在尝试创建新的SQLiteConnection时失败,出现“无法打开数据库文件” 我怀疑SQLite自己的临时文件正在妨碍。总之,我的问题是:我能做些什么让SQLite在测试结束后正确地整理一下吗 更多细节,以防任何相关信息: 我正在使用 在第一个测试完成后,在第二个测试尝试创建其数据库文件之前,我可

我为现有的SQLite应用程序添加了2个C#集成测试。每个测试都会创建一个数据库文件(使用Guid来保证唯一性),并对数据库执行一些操作。测试单独通过,但如果一个接一个地运行,则会失败。第二个测试在尝试创建新的SQLiteConnection时失败,出现“无法打开数据库文件”

我怀疑SQLite自己的临时文件正在妨碍。总之,我的问题是:我能做些什么让SQLite在测试结束后正确地整理一下吗

更多细节,以防任何相关信息:

  • 我正在使用
  • 在第一个测试完成后,在第二个测试尝试创建其数据库文件之前,我可以在%TEMP%中看到许多文件和文件夹:

  • 文件报告20180829-1035.diagsession
  • 文件夹39fbfdd5-5f6e-4563-9822-cb153e30e5b6.PackageExtraction
  • 文件夹39FBFDD5-5F6E-4563-9822-CB153E30E5B6.0
  • 文件夹E41DD259-1CAA-4FEF-A779-003804F6B783
  • 文件夹E41DD259-1CAA-4FEF-A779-003804F6B783.0
  • 文件夹EAFBACB1-B978-419A-98B9-07258EB35C44
  • 文件夹EAFBACB1-B978-419A-98B9-07258EB35C44.0

    • 在试验结束时,除1号和2号报告外,所有报告均已删除,并留下一份新报告。39FBFDD5-5F6E-4563-9822-CB153E30E5B6。当测试下次运行时,除了1之外,它们都将被删除

临时SQLite文件的存在是一种误导。我的代码的真正问题是我调用的MS包装器中的一行:

MobileServiceClient.EnsureFileExists(dbPath);
这最终决定

if (!File.Exists(path)) File.Create(path);
正如堆栈溢出回答所指出的,File.Create()将使文件保持锁定状态。因此,我的解决方案是确保文件为空,未锁定的文件预先存在:

if (File.Exists(path)) File.Delete(path);
File.Create(path).Close();