VSTS 和 LocalDB:无法更新数据库 XXX,因为该数据库是只读的

VSTS and LocalDB: Failed to update database XXX because the database is read-only

我们正在使用 VSTS,并且在持续构建过程中的集成测试 运行 中开始出现错误。我们使用 localdb 是为了 运行 再次测试预定义的 mdb 文件,该文件被复制到单元测试项目的输出文件夹。

我们正在使用 powershell 脚本来确保 localdb 正在执行。 IT 有一行:

SqlLocalDB.exe create "MSSQLLocalDB" -s

用于 运行 集成测试的连接字符串是这样动态构建的:

$"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename={Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath)}\db.mdf;Integrated Security=True;MultipleActiveResultSets=True";

我们最近唯一改变的是我们开始针对 .NET 4.7.1 进行构建,但我认为这不会对这些问题产生任何影响...

关于我们为什么开始出现这些错误的任何线索?

此问题的解决方案是确保您要还原的 .mdf 位于生成代理用户的临时目录中。

可以使用 %TEMP% 环境变量检索临时目录位置。在 c#

Environment.GetEnvironmentVariable("TEMP")

您可以使用 sp_attach_db

恢复
EXEC sp_attach_db @dbname = N'YourDbName', @filename1 = 'TEMPFOLDER\YourDbName.mdf' 

上面一行中的 TEMPFOLDER 已被替换,但您认为适合作为 TEMP 环境变量的值。