2012-02-28 18 views
0

DLLを参照するWebアプリケーションがあります。このDLLには特定の設定値があり、通常はweb.configの一部です。設定ファイルを動的に切り替える(ウェブまたはアプリの設定)

このDLLは、Webアプリケーションとは異なる設定で呼び出す必要があります。 DLLはサードパーティ製であり、変更することはできません。

以下を試して失敗しました。

  1. DLL(a.dll、b.dllという名前)のコピーを別に用意し、リフレクションで読み込みます。ここでの問題は、a.dll.configではなくweb.configを探していることです。また、メインプログラムと反射アセンブリで同じタイプが参照されるため、狂ってしまいます。
  2. AppDomain.CurrentDomain.SetData("WEB_CONFIG_FILE", @"Config\Path")を使用してオンザフライで設定を変更し、通話後にスイッチを元に戻します。ここで問題となるのは、初めてスイッチを切ってもconfigセクションが再びロードされないということです。
  3. ConfigurationManager.RefreshSection(@"configuration\mysection")を使用して強制的にリフレッシュします。これは動作しないと人々はこの呼び出しはバグであると言う.NETで
  4. 私はいくつかの推奨を参照してweb.configを更新したが、これは値の切り替えが起こるため、私にとっては良い選択ではないかもしれませんかなり頻繁に

他に何かできますか?

答えて

2

DLLを別のプロセスでホストし、COM(または.NetリモーティングまたはWebサービスなど)を使用して通信します。

I.e.クラスをCOMオブジェクトとして公開するC#(例えば)を使用してホストプロセスa.exeを作成し、クラスはDLLメソッド/クラスを呼び出します。 COMオブジェクトとして登録します。

次に、同じ(しかし異なるCLSIDを持つ)b.exeを作成します。

a.exeとb.exe(異なるフォルダ内)に異なる設定ファイルを作成できるようになりましたが、どちらもDLLサービスを使用できます。

また、内部Webアプリケーションを2つ使用し、SOAPや何かを使って同様のことをすることもできます。

しかし、結論は、DLLがweb.configで動作する場合は、それらのうちの少なくとも1つを別のフォルダに別のプロセスに配置する必要があります。

+0

各呼び出しが新しいインスタンスを作成する場合、out of procは機能します。私のアプリはトラフィックが少ないので、それは問題ではありません。これを試して戻ってきます。しかし、オンザフライで設定を切り替えるようなものには本当の解決策はないということは、イライラしています。 – fozylet

+0

@fozyletでは、構成ごとに異なるclsidを持つ2つの異なる名前のプロセスを作成します。その後、プロセスを再起動することなく、それぞれを再利用することができます。 – Ben

関連する問題