2


0

アプリケーションがMyApplication.dll.configファイルを読み取らないのはなぜですか?

作業中のC#.NETプロジェクトでアプリケーション設定を使用しようとしています。 しかし、デフォルト値以外のものを返すようには思えません。 プロジェクトプロパティを通じて、DBConnectionStringという単一の設定を追加し、その値を使用する接続文字列に設定しました。 そのスコープは「アプリケーション」に設定されます。

これを行うと、Settings.settings、Settings.Designer.CS、app.conifgなどの多数のファイルが作成されました。 私が理解していることから、2つのSettings。*ファイルは、 ApplicationSettingsBase`から派生したカスタムの Settings`クラスを定義します。 `Settings`クラスには、各設定を設定および取得するために使用できるカスタムのタイプセーフなプロパティがあります。 app.configファイルは、実際の設定値を保存するXMLファイルです。

プロジェクトをビルドすると、app.configファイルがMyApplication.dll.configとしてターゲットディレクトリにコピーされているように見えます。 私のプログラムは正常に動作し、デフォルトの接続文字列を使用できます。

次に、MyApplicaiton.dll.configファイルを編集して接続文字列を変更しようとしました。 プログラムを再度実行しましたが、デフォルト値を使用し続けました。 Settings.Designerファイルには、元のデフォルト文字列を含む `DefaultSettingValueAttribute`があることに気付きました。 この属性を削除しようとしましたが、接続文字列の設定を取得しようとすると、nullが返されました。

これは、接続文字列を読み取るために使用しているコードです。

string conn = Properties.Settings.Default.DbConnectionString

何がおかしいのですか? デフォルト値ではなく設定ファイルの値を返すようにするにはどうすればよいですか?

'' '' '

更新:

申し訳ありませんが、これについて言及する必要がありました。 実際、パブリックAPIを介して別のアプリケーションのプラグインを作成しています。 したがって、私のプロジェクトはEXEではなくDLLです。

2 Answer


3


* .dll.config`ファイルから設定を読み取ることはできません。 ライブラリに特別な設定が必要な場合は、 `app.config`または web.config`ファイルにそれらを配置する必要があります。

編集:外部設定ファイルをメインアプリケーションまたはWeb設定ファイルに含めることができます。 詳細については、http://msdn.microsoft.com/en-us/library/ms254494.aspx [こちら]をご覧ください。

https://stackoverflow.com/questions/89245/how-do-you-manage-net-app-config-files-for-large-applications [この]質問では、大規模プロジェクトの構成ファイルを管理する方法について説明します。


-1


設定ファイルと.configファイルは別のものです(設定ファイルを作成したときにVSが自動的に.configを追加した理由はわかりません)。 しかし、設定ファイルはクラスにコンパイルされ、あなたが言ったように参照されます。 .NETリフレクターでdllを逆コンパイルすると、Settingsクラスがそこにあります。 定数値または外部リソースを保持するために使用されます。 例:エラーメッセージ文字列、アイコン、または画像。

構成ファイルは、頻繁に、または環境(dev、test、prod)間で変更できる設定用です。 接続文字列には、構成ファイルのセクションを使用する必要があります。 また、プロパティはSystem.Configuration.ConfigurationManager ["connectionStringName"]を使用して参照できます。

ただし、元の投稿からは、.dllがより大きなプロジェクト(Webプロジェクトの.exe)で使用されるようです。 1つの注意点は、すべてのプロジェクトが1つの.configファイルのみを使用することです。 そして、それがメインプロジェクトの設定ファイルです。 Webサイトのweb.configファイルとexeはXXX.XXX.XXX.exe.configを使用します(おわかりのように、*。exe.configファイルはapp.configファイルのコピーに名前が変更されています)。 dllには使用可能な構成ファイルがありません。 すべてのdllは、メインプロジェクトの.configファイルを参照して情報を取得します。

接続文字列が変更されない場合は、必ず設定ファイルを使用してください。 それ以外の場合は、構成ファイルを使用して、メインプロジェクトの開発者に接続文字列の入力先を決定させます。