0

C# アプリケーションから呼び出されたときに正常に動作する C# クラス ライブラリがあります。ただし、COM Interop もサポートしているため、古い C++ クライアントからも呼び出すことができます。C# クラス ライブラリには、WCF サービス参照が含まれています。WCF 呼び出しは C# 呼び出しから正常に機能しますが、COM 相互運用機能から呼び出すと、次のエラーが表示されます。

"Could not find default endpoint element that references contract 'xxxx' in the ServiceModel client configuration section....."

参照は app.config にあります。より具体的には、DLL をビルドするときにビルドされる .config にあります。C# アプリケーションから呼び出された場合、DLL はこの構成ファイルを探す場所 (つまり、dll と同じディレクトリ) を認識しているため、必要な情報を見つけているようです。ただし、COM Interop から呼び出された場合は、別の場所を探しているようで、見つからないようです。

これを修正して両方のシナリオで機能させる方法を知っている人はいますか?

4

2 に答える 2

1

.NET では、使用する .dll ではなく、常に構成ファイルを持つ実行可能ファイルです。構成情報が必要な .dll であっても、アプリケーションの構成ファイルに含める必要があります。

デフォルトでは、CLR は exe と同じディレクトリにある .config という構成ファイルを探します。これがたまたま古い C++ プログラムであったとしても、少なくとも私の経験によれば、違いはありません。構成ファイルを C++ プログラムのディレクトリにコピーし、実行可能ファイルと一致するように名前を変更するだけで、準備完了です。

どこでも機能するソリューションが必要な場合は、必要な構成情報を何らかのソースから手動でロードした後、構成をコードで表現することを検討してください。

于 2012-07-23T14:17:23.153 に答える
1

COM サーバーで .config ファイルを使用するのは非常に非現実的です。System.Configuration が探すものは、DLL ではなくEXE に関連付けられています。Is name はfoo.exe.config、「foo」が EXE の名前で、.exe と同じディレクトリに保存する必要があります。COM サーバーは、どの EXE がロードするかを予測できません。

ただし、.config ファイルを適切な名前で適切なディレクトリに保存することで、手動で機能させることができます。

于 2012-07-23T14:17:03.113 に答える