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

Continuous integration VSTS和LocalDB:无法更新数据库XXX,因为该数据库是只读的,continuous-integration,azure-devops,integration-testing,localdb,Continuous Integration,Azure Devops,Integration Testing,Localdb,我们正在使用VST,并且在持续构建过程中运行的集成测试中开始出现错误。我们使用localdb以便在预定义的mdb文件中运行测试,该文件被复制到单元测试项目的输出文件夹中 我们正在使用powershell脚本来确保localdb正在执行。它只有一行: SqlLocalDB.exe create "MSSQLLocalDB" -s 用于运行集成测试的连接字符串是动态构建的,如下所示: $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={P

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

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

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";
最近我们唯一改变的是,我们已经开始针对.NET4.7.1进行构建,但我认为这不应该对这些问题产生任何影响


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

解决方案是确保要还原的.mdf位于Build agent users temp目录中

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

您可以使用sp_attach_db进行恢复

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

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

是否更新测试中的记录或mdb文件已更新?你使用私人代理吗?尝试在连接字符串中指定数据库名称(
Initial Catalog=xx
)。另一方面,尝试在不等待的情况下执行
alterdatabase[dbName]SET READ\u WRITE
我刚才运行了一个CI,开始面临同样的问题。我已经为一个v运行了相同的构建。很长一段时间,localdb数据库没有改变任何东西,这与我的情况非常相似:它工作了很长一段时间,然后就停止了。在我的情况下,我已经更新了框架版本,但这不应该有任何影响。。。我想…复制这个问题的步骤是什么?你能在OneDrive上共享日志吗?(将system.debug变量设置为true,然后进行队列生成)是否更新测试中的记录或mdb文件是否已更新?你使用私人代理吗?尝试在连接字符串中指定数据库名称(
Initial Catalog=xx
)。另一方面,尝试执行
ALTER DATABASE[dbName]SET READ_WRITE(无需等待)
。那么,你是说我需要将mdb文件复制到temp文件夹(而不是release文件夹)并从那里附加它?谢谢。有人能建议如何做到这一点吗?我目前有一个带有MDF文件的共享项目和两个引用该共享项目的测试项目。MDF文件被设置为Copy always,因此它最终位于我的两个测试项目的bin目录中。在两个项目中,我都有
“数据源=(LocalDB)\mssqllocaldb;AttachDbFilename=| DataDirectory\db.mdf;..
所以我在测试中直接使用此连接字符串。我不喜欢使用将mdf复制到TEMP的构建前/后脚本的方法。还有其他方法吗?
EXEC sp_attach_db @dbname = N'YourDbName', @filename1 = 'TEMPFOLDER\YourDbName.mdf'