我们有一个使用 C++/CLI 的应用程序,其中一部分代码大致如下:
void foo(const std::string& connStr)
{
gcroot<SqlConnection^> conn = gcnew SqlConnection();
conn->ConnectionString = gcnew String(connStr.c_str());
}
如果我安装了 .NET 4.5,则会在 SqlConnection::ConnectionString::set 中引发 FatalExecutionEngineError 异常,调用堆栈的顶部位于 bids::bids() 中。
这是有趣的部分:我们使用 VS2010 和 msvcr100.dll,但如果我查看 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 的依赖关系,它显示它依赖于 msvcr110_0400.dll。事实上,当应用程序运行时,我可以看到所有 3 个模块都已加载。
我的猜测是某种 CRT 版本不匹配,所以我卸载了 .NET 4.5 并安装了 4.0。clr.dll 现在显示对 msvcr100_0400.dll 的依赖关系,并且应用程序运行时不会引发该异常。
我最困惑的是“clr.dll”,以及为什么完全相同的版本(4.0.30319)对于两个版本的.NET 有两个不同的 msvcr___.dll 依赖项。关于这是否真的导致异常的任何想法,或者可能是 .NET 4.5 的其他原因?
感谢您的任何反馈。