我正在为我创建的与数据库交互的一些函数创建一个单元测试。我有一些我计划在这些单元测试中使用的数据库的设置和拆卸代码。现在有趣的是,这段代码在 WinForms、控制台、DLL 库中正确执行,但是当代码在单元测试中执行时,当它尝试运行 ExecuteNonQuery() 命令时,我得到了一个有趣的异常。
[Outer Exception]
Exception has been thrown by the target of invocation
[Inner Exception]
The C++ module failed to load during appdomain initialization. \n
在进一步挖掘我的异常后,我发现了以下内部异常:
Unable to load DLL 'MSVCR80.dll": The specfiied module could not be found ... The C++ module fialed to load during appdomain initialization.
查看堆栈跟踪时,您会发现:
"at Microsoft.SqlServer.Management.Common.ExecuteBatch.GetStatements(String sqlCommand)
现在我要承认我在这里有点过头了,所以如果有人能解释为什么在作为 UnitTest 的一部分执行时会抛出这个异常以及修复它的方法,那就太好了!
private static void ExecSql(string sql, string connectionString)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
conn.Open();
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(sql);
server.ConnectionContext.Disconnect();
//MessageBox.Show("Script Executed.");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}