私は以下のプロジェクトがあります。.NETの.config HELL
- MVCを
- コンソールアプリケーション
- クラスライブラリが
- Windowsフォームアプリケーション
- COMライブラリ
これらのアプリケーションはすべて単一の構成ファイルを使用します。私が理解する限り、app.configファイルは、Webプロジェクト用のウィンドウ、コンソールアプリケーション、クラスライブラリ用です。
これらのすべてのプロジェクトで同じ設定にする必要があります。マシン構成ファイルを使用することをお勧めしますが、常にアクセスできるとは限りません。そのため、構成ファイルは私たちのソリューション内に存在する必要があります。
設定ファイルがどのようにビルドされるのか完全に理解していません。現在、私は次のような単純なプロジェクトを書いています。
- サービス設定ファイルのために保存するクラスライブラリ。 Aはこれを反映させようとしました。
- クラスライブラリからapp.configを読み込むWindowsアプリケーションです。
私は、次のコードを実行すると、私はテスト値で設定ファイルを取得することを期待:
_applicationSettings = ConfigurationManager.OpenExeConfiguration(
System.Reflection.Assembly.GetAssembly(typeof(WCSConfiguration)).Location
).AppSettings;
私が代わりに取得すると、空のアプリケーションの設定ファイルです。
クラスライブラリには、次のApp.configファイルを持っている:私は、現在実行中のコードの集合を返すことを期待.GetExecutingAssembly()
メソッドを使用してみましたが
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="TestTextKey" value="TestTextValue"/>
</appSettings>
</configuration>
。これは機能しませんでしたが、代わりにWindowsアプリケーションのアセンブリが返されました。
GetAssembly(type(WCSConfiguration))
が正しいアセンブリを返しましたが、設定ファイルがbin/debugディレクトリにありませんでした。
私は、何か根本的に間違っているか、マイクロソフトがこれを十分に柔軟にしていないと感じています。私も説明のためにMSDNを検索しようとしましたが、これはよくIMOには書かれていません。
COMライブラリで設定ファイルを使用できるかどうかわからないため、私もCOMを太字にしました。まず、私は他のプロジェクトを働かせたいと思っています。
私はこれが多くの情報であることを理解しています。どんな助けでも大変に感謝しています。以前はレジストリの使用を選択しましたが、主にレジストリへのアクセスがいくつかのシナリオでは利用できないため、これは厄介なものでした。さらに、我々は今、アプリケーションの複数のバージョンがあり、枝の切り替えは時間半の仕事です:(
はあなたに
編集ありがとう:私はApp.configファイルにDLLのconfigセクションを追加した場合
をこれは、これらの設定がそのアプリケーションからのみ利用可能であることを意味します。私が間違っている場合、私を修正してください。私が提供した例は縮小版です。合計で約10のウィンドウアプリケーション、1つのMVCプロジェクト、ライブラリはそのすべてをその構成を使用する必要があります。
構成設定はほとんどが接続文字列で、データベースには属していないルックアップ値やその他のマイナーな設定はほとんどありません。現時点での主な関心事は、接続文字列です。各リリースが異なるデータベースを指しているアプリケーションのマイナーリリースはほとんどありません。
私はこの問題を解決したいと思っています。これは、オンラインで公開することができ、同じ問題を抱えている他の人々が時間を費やさないようにするうえで有効な解決策です。
IMO: 独自の設定ファイルの場所を保存するには、App.configとWeb.configの両方を使用します。
構成を処理するための読み取りと書き込みのコンフィグレーションとDLL用のシンプルなXMLシリアライザを作成します。
COMオブジェクトは長い話題であり、COM DLLではApp.configもWeb.configも使用できないため、「ハック」が実装されていました。
http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openmappedexeconfiguration.aspxを使用して任意の設定ファイルを開こうとしましたか?あなたが指し示すことができる共有場所に共有設定ファイルがあると思います。 –
私はこれを使ってみました。 OpenMappedExeConfigurationは、クラスライブラリの設定を返すと思ったOpenMappedMachineConfigurationよりも、実行可能ファイルに対して機能しますが、どちらも機能しません。 –
OpenMappedExeConfigurationはすべての種類の設定で動作しますが、実行可能ファイルで動作することを意味していませんか?私は毎日私のwebapplicationsの設定ファイルを開くためにそれを使用する –