我们有一个使用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异常,并在titles :: bids()中使用callstack的顶部。
这是有趣的部分:我们使用VS2010和msvcr100.dll,但如果我查看C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll的依赖关系,它会显示它取决于msvcr110_0400。 DLL。事实上,当应用运行时,我可以看到所有这三个模块都被加载。
我的猜测是某种CRT版本不匹配,所以我卸载了.NET 4.5并安装了4.0。 clr.dll现在显示对msvcr100_0400.dll的依赖,并且应用程序运行时不会抛出该异常。
我最困惑的是“clr.dll”,以及为什么完全相同的版本(4.0.30319)对两个版本的.NET有两个不同的msvcr ___。dll依赖项。有关这是否真的导致异常的任何想法,或者可能是.NET 4.5的其他内容?
感谢您的反馈。