最近変更したプロジェクトがあります。プロジェクトは.NETで記述され、x64マシン用にコンパイルされています。データベースと対話するために構築したDataEntitiesモデルがあります。ただし、エンティティフレームワークモデルに接続しようとすると、エラーが発生します。
エンティティフレームワークのedmxファイルはDataCentral.edmxと呼ばれます。このファイルを使用すると、インスタンスに接続するために実行しようとしているコードは非常に単純です。
string cs = CSManager.GetConnectionString();
DataCentralEntities ctx = new DataCentralEntities(cs);
これらの2行を実行すると、次の例外を除いて2行目でクラッシュします。
Could not load file or assembly 'Interop.SHDocVw, Version=1.1.0.0,
Culture=neutral, PublicKeyToken=null' or one of its dependencies.
An attempt was made to load a program with an incorrect format.
x86として実行すると(他の理由で長期的には不可能です)、問題なく実行されます。接続文字列を確認しましたが、正しくフォーマットされています。
これが私の質問です:私は新しい変更のいずれにもShDocVwを使用していません。実際、このエラーに遭遇するまで、私はそれを聞いたことがありませんでした。一体何がこれをここで吐く原因になるのでしょうか?私が行方不明になっているのは何ですか?
アップデート
おそらく.NET2.0の頃に作成されたフォームを見つけました。(おそらくもっと早いです。)ShDocVwライブラリを介してWebブラウザコントロール(公式のWebBrowserコントロールではない)への参照を作成しました。どうやら、これは公式のコントロールが登場する前に、ウェブブラウザをアプリに埋め込むかなり一般的な方法でした。
このフォームをアップグレードして、公式のWebBrowserコントロールを使用し、プロジェクト内のShDocVw.dllへのすべての参照を削除しました。これで、x64でもすべてが期待どおりに機能します。
私がまだ理解していないのは、ShDocVw.dllへの参照がプロジェクトにあるときにEntityFrameworkがその行でクラッシュする理由です。その部分は私には意味がありません。しかし、私たちは今、立ち直っています。