0

C++/CLI を使用するアプリがあり、コードの一部は大まかに次のようになります。

void foo(const std::string& connStr)
{
    gcroot<SqlConnection^> conn = gcnew SqlConnection();
    conn->ConnectionString = gcnew String(connStr.c_str());
}

.NET 4.5 がインストールされている場合、FatalExecutionEngineError 例外が SqlConnection::ConnectionString::set でスローされ、コールスタックの先頭が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) に 2 つのバージョンの .NET に対して 2 つの異なる msvcr___.dll 依存関係がある理由です。これが実際に例外を引き起こしているのか、それとも .NET 4.5 の何か他のものだったのかについて何か考えはありますか?

フィードバックをお寄せいただきありがとうございます。

4

0 に答える 0