2011-10-28 3 views
0

.NET COMオブジェクトのインスタンスを作成しています。ConfigurationManager.AppSettingsおよびConfigurationManager.ConnectionStringsプロパティ。 アセンブリ設定ファイルに設定があっても、気づいたことがあります。 "ComLib.dll.config"これらの設定は実行時には利用できません。asp-classic Webページによって呼び出される.Net COMオブジェクト内でConfigurationManager.App/ConnectionSettingsを編集する方法

Dim COMObject 
Set COMObject = Server.CreateObject("COMAPI.COMObject") 

私は.NETのCOMオブジェクトのコンストラクタにステップ私のVS2010のデバッガを使用(COMAPI.COMObject:

は、私は、次を使用してASPクラシックWebページからのCOMオブジェクトを作成するために電話をかけます)。これがポイントです。ConfigurationManagerがロードされているかどうかを確認しました。

両方「Assembly.GetExecutingAssembly」「Assembly.GetCallingAssembly」「ComLib.dll」アセンブリ登録場所への完全なパスで同じ結果を有します。それは私が期待しているものです。この場所には"ComLib.dll.config"ファイルもありますが、これはConfigurationManagerに引き込まれません。

私は、例外が発生し、次のコマンドを使用してのAppSettingsをクリアしようとすると:

ConfigurationManager.AppSettings.Clear(); 

例外は次のとおりです。 "Serverオブジェクト006〜ASP 0177〜Server.CreateObjectには〜80131902失敗しました"

上記の例外は「AppSettingsは読み取り専用です」というASP Classicの解釈ですが、私は100%確実ではありません。

私が上に移動し、「ComLib.dll.config」ファイルをロードし、その後が設定ConfigurationManager.AppSettingsに追加のAppSettingsの各項目の上に実行されているが、それは同様に例外が発生しています:"サーバーオブジェクト:006〜ASP 0177〜Server.CreateObjectが失敗しました〜80131902"。次のように

私は.NETのCOMオブジェクトで使用するコードは次のとおりです。

Assembly comApiAssembly = Assembly.GetExecutingAssembly(); 
string comApiLocation = comApiAssembly.Location; 
configuration = null; 
configuration = ConfigurationManager.OpenExeConfiguration(comApiLocation); 
var toLoadEnumberable = configuration.AppSettings.Settings.GetEnumerator(); 
while (toLoadEnumberable.MoveNext()) 
{ 
    var current = (KeyValueConfigurationElement)toLoadEnumberable.Current; 
    ConfigurationManager.AppSettings.Add(current.Key, current.Value); 
} 

この.NET COM LIBは、他の.NETへの呼び出しを行うために使用されているように私はのConfigurationManagerで私の設定情報を必要としますアセンブリ。他の.NETアセンブリでは構成が必要です。

ありがとうございます。

答えて

2

help from the MSDN forumsを手に入れることができました。

基本的に、ConfigurationManagerで.Clear/.Add/.Removeを使用する代わりに、

ConfigurationManager.AppSettings["Key"] = "KeyValue"; 

これはConfigurationManager.AppSettingsを更新します。それが存在するかどうか、およびそのキーの値を設定した場合のAppSettings私は、設定にアクセスします。これは、最初の "ASPクラシック" - > "COM API"コールのスコープ外のアプリケーションの部分にアクセスするときに、ConfigurationManagerからアプリケーション設定を取得できるため、素晴らしいことです。

これはすべて、私はまだConfigurationManager.ConnectionStringsを編集する方法を知らないと言います。

私は例外が発生しのconnectionStrings.Clear/.Add/.Removeをしよう。この問題に関するアイデアはありますか?

詳細については、この回答を更新します。

アップデートとして:設定がないConnectionString設定を回避するために、Unity Container IoCフレームワークを実装しました。私はStaticインスタンスを使用してIoCコンテナをホストし、そのようにインスタンスを解決します。

このようにすれば、COM APIのクラスタイプに対してインターフェイスを登録できます。つまり、コンストラクタインジェクションを介して接続文字列設定を渡すことができます。接続文字列設定が有効範囲にあるため解決インスタンスに渡します。

関連する問題