2012-03-08 37 views
3

私はVisual Studio 2010とC#4.0を使用しています。私はWebサービスへのインターフェイスを公開するプロジェクトを持っています。 Webサービスのバインディングを定義するapp.configがあります。このプロジェクトを他のクライアントが使用するライブラリとして公開したいと思います。インポートされたC#プロジェクトのapp configの使用方法

しかし、このプロジェクトをクライアントプロジェクト(コンソールアプリケーションなど)にインポートしようとすると、Webサービスに関連付けられた設定ファイルが見つからないため、エラーが発生します。

自分のライブラリプロジェクト内でapp.configを使用する方法はありますか?それでクライアントは独自の設定ファイルを定義することなくそれを使用できますか?

+0

これは何度も複製されています。 – nawfal

答えて

1

どのようにライブラリプロジェクトを少し変更について:

  1. 変更「を埋め込まれたリソース」にライブラリプロジェクトのビルドアクションでapp.configをします。
  2. configを読み込むときにコードを変更し、configが存在するかどうかを確認し、app.configを埋め込みリソースから現在のフォルダに抽出していない場合は、ConfigurationManager.OpenMappedExeConfigurationのようなコードを読み込みます。

その後、このライブラリを使用するプロジェクトでは、これらの設定について心配する必要はありません。

+0

プログラムファイルが非管理者ユーザーの場合のように、そのフォルダに書き込むための十分な権限を持っていないと、ファイルがAppDataに書き込まれそこから読み取られないと、問題はありません。 – ChrFin

+0

それからちょうどそれを正確にしないで、それをメモリで読んでください –

0

まず、以下のようなユーティリティ関数を作成します。この関数は、Webサービス(もちろんメインプロジェクト)から呼び出せるライブラリまたはクラスに存在する必要があります。このライブラリへの参照をWebサービスに追加する方がよいでしょう。あなたがメインのプロジェクトからGetAppConfigValue(string)を呼び出すことができれば、それは独自の設定ファイルであるため、

public static string GetAppConfigValue(string key) 
    { 
     return ConfigurationManager.AppSettings[key] ?? GetAppConfigValue(GetAppConfigFileName(), key); 
    } 

    private static string GetAppConfigValue(string appConfigFileName, string key) 
    { 
     ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
     fileMap.ExeConfigFilename = appConfigFileName; 
     Configuration appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
     return appConfig.AppSettings.Settings[key].Value; 
    } 

は今、それがキャッシュされたapp.configの値を返します。マップされた構成設定を返すときに、Webサービスプロジェクトからパブリック関数を呼び出すこともできます。ここでの微妙な部分は、configファイルのフルパスを適切に供給することです!