2011-12-05 10 views
4

.Net Framework 4 Client Profileをターゲットにするために構築されたクラスライブラリにいくつかのコードがあります。このコードは、消費するアプリケーションの構成にアクセスします。 app.configをのための右のオブジェクトを取得し、クライアントアプリケーション(のWinFormsアプリケーション、コンソールアプリケーションなど)のために簡単です:クライアントプロファイルクラスライブラリを使用したweb.configへのアクセス

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

私のクラスライブラリは、Webアプリケーションのために働く必要があります。 Web.Configへのアクセスを取得するための適切な方法も簡単です。

WebConfigurationManager.OpenWebConfiguration("~"); 

問題はWebConfigurationManagerは、.NET Frameworkの4クライアントプロファイルの一部として使用することはできませんSystem.Webのの一部であるということです。

どちらの場合でも動作するように、コードを記述したり、プロジェクトを構造化する方法はありますか?クライアントプロファイルのみがインストールされているシステムのapp.configにアクセスするには、十分に実行する必要があります。また、必要に応じてweb.configにアクセスできる必要があります。おそらく、私が動的にsystem.webや別のアセンブリをロードする方法があります。

答えて

1

ようものは使用しないでくださいあなたはappSettingsセクションに必要なすべてを、置くか、他のクラスとConfigurationMangerクラスとの選択肢を模索する必要があり、最終的に制限して、行ってもいいです動作する場合Davide Pirasによって、ConfigurationManager.AppSettings[]は、AppSettingsセクションにあるエントリに対して機能します。そのセクションの外側では、ConfigurationManager.GetSection()が使用できます。

奇妙なことに、ConfigurationManager.GetSection()の戻り値は、Configuration.GetSection()の戻り値と同じではありません。 ConfigurationManagerのバージョンでは、AppSettingsSectionなどにキャストできるオブジェクトは返されません。代わりにSystem.Collections.Specialized.NameValueCollectionにキャストする必要があります。しかし、キー/値の文字列を扱うことだけを考えている限り、十分に機能します。完全なコードは次のようになります。

using System.Configuration; 
using System.Collections.Specialized; 

var settingsSection = ConfigurationManager.GetSection(sectionName) as NameValueCollection; 
var configValue = settingsSection[keyName]; 
1

非常に興味深い質問;-)

あなたのappSettingsだけのSystem.Configurationを必要とConfigurationManager.AppSettingsを使用して、それがWebアプリケーションにどのように動作するかをテスト読まなければならない場合

。それはあなたが言及したように WebConfigurationManager

+0

残念ながら、私はAppSettings外のセクションを読み取ることができる必要があります。これがSystem.Configurationオブジェクトを開いている理由の1つです。 GetSection()を呼び出すことができます。 –

関連する問題