2016-05-02 40 views
0

私は構成設定をロードしたいクラスライブラリプロジェクトを持っています。App.Configがnullを返す

ここにapp.configファイルがあります。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="editMode" value="2" /> 
    <add key="fileType" value="0" /> 
    <add key="Editor" value="C:\Program Files\Adobe\Adobe Photoshop CC 2015\Photoshop.exe" /> 
    </appSettings> 
</configuration> 

ここにメインプログラムのコードがあります。

string savedEditor = ConfigurationManager.AppSettings["Editor"]; 
MessageBox.Show(savedEditor); 
string savededitMode = ConfigurationManager.AppSettings["editMode"]; 
MessageBox.Show(savededitMode);     
string savedfileType = ConfigurationManager.AppSettings["fileType"]; 
MessageBox.Show(savedfileType); 

コンパイルが正常に行われ、*.dll.configファイルが作成されます。ただし、3つのキーの値はnullを返します。私は間違って何をしていますか?ありがとう。

+3

ライブラリはapp.configファイルを出力することがありますが、別のプログラムでそのライブラリをインポートするときに使用されるものではありません。私はそれらのアプリケーション設定をインポートするアプリケーションのapp.configにコピーするか、または存在しない場合は名前を変更して設定をコピーすることで問題は解決すると思います。 – evanmcdonnal

+0

適切な指示を使用していることを確認してください。 'using System.Configuration;' –

答えて

1

問題の原因になっている可能性が高いので、私は答えとしてコメントしています。

あなたのクラスライブラリプロジェクト(dllをビルドするもの)は、設定を出力するかもしれませんが、他のプロジェクトでそのクラスをインポートするときに使用されるものではありません。使用されているapp.configは、呼び出されているアプリケーションに関連付けられているものです。そのファイルにこれらの値がない可能性が最も高いので、AppSettings辞書からそれらの値を取得しようとすると、nullが返されます。問題を解決するには、以下の項目をメインアプリケーションappSettingsのapp.configセクションにコピーするか、存在しない場合はapp.configを作成してください。

<add key="editMode" value="2" /> 
<add key="fileType" value="0" /> 
<add key="Editor" value="C:\Program Files\Adobe\Adobe Photoshop CC 2015\Photoshop.exe" /> 
+0

まだ運がありません。私は2番目のファイルの新しいapp.configファイルを作成しました(同じキー値をコピーし、同じコードを使用して構成設定をインポートしました)。 –

0

上記の答えと同様に、使用される設定ファイルは、dllを呼び出す/参照する実行可能ファイル用です。

"MyProgram.exe"という名前の実行可能ファイルがあり、DLLの名前が "MyFirst.dll"の場合、 "MyProgram.exe"、 "MyFirst.dll"、 "MyProgram.exe.config"が必要です同じディレクトリにあります。 "MyProgram.exe.config"ファイルには、設定ファイルから取得しようとしている設定値が必要です。

それは意味がありますか?