app.configファイルからの読み取り


131

コードを使用して、以下のapp.configファイルからStartingMonthColumnおよびCategoryHeadingColumnを読み取ろうとしています

ConfigurationSettings.AppSettings["StartingMonthColumn"]

しかし、それはnullを返し、ConfigurationSettings.AppSettings.Countもゼロを返します

私のWindowsアプリケーションでこれを読むのを助けてください

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

プロジェクトのルートにある構成ファイルを変更しながら、\ bin \ debugフォルダーからアプリを実行しようとしていますか?それ以外の場合は、構成を変更し、クリーンアップの実行後にコードを再ビルドします。
カンカン

1
ファイルの名前は「app.config」ではありませんか?これはプロジェクトでは確かにその名前が付けられていますが、アプリケーションの出力ディレクトリでは、出力バイナリ+ ".config"と同じ名前にする必要があります( "MyLibrary.dll.config"、または "MyProgram.exe.config "、etc ...)
BrainSlugs83

@ BrianSlugs83おかげで、私のアプリがクラッシュする理由を知りました。さて、2日間どこでも検索した後、答えはコメントにあります。「app.config」があり、「MyProgram.exe.config」がありませんでした。
śmiglidigli

解決策については、stackoverflow.com / questions / 1189364 /…をご覧ください。ありがとう
Ariful Islam

回答:


171

構成設定 .AppSettings廃止されました。代わりに構成マネージャー .AppSettingsを使用する必要があります(System.Configurationへの参照を追加する必要があります)

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

それでもアプリ設定の読み取りに問題がある場合app.configは、ファイルの名前が正しいことを確認してください。具体的には、実行中のアセンブリ、つまりに従って名前を付けMyApp.exe.config、と同じディレクトリに配置する必要がありますMyApp.exe


2
ConfigurationSettings.AppSettings ["StartingMonthColumn"]がnullまたは空の文字列を返す場合、その値を解析しようとするとInt32.Parseが例外をスローするのではないかと思います。
Bittercoder、2010年

@bittercoder、そうですが、app.configファイルは常に正しい構成になっているはずです。OPが何らかの形で処理を追加する場合、つまりTryParseを追加する場合は、必ず追加できます。しかし、これは問題ではありませんでした。
ジェームス

2
また、Settings.Default。*を介して、値の厳密に型指定されたバージョンにアクセスすることもできます(つまり、この場合は、Settings.Default.StartingMonthColumnになります)。
BrainSlugs83 2013

@ BrainSlugs83 ユーザー設定とアプリ設定を混同していることに注意してください。アプリ設定への厳密に型指定されたアクセスが必要な場合は、カスタムのConfigurationSection
James

これは不正解です。値のスコープが「ユーザー」か「アプリケーション」かに関係なく、app.configから値を取得します(GUIデザイナーから、各設定のスコープを選択できます)。
BrainSlugs83 2013

20

将来の参照のためだけSystem.Configurationに、参照ライブラリに追加する必要があります。

ここに画像の説明を入力してください


2
あなたの答えはここの最初の答えよりも優れています、誰もがあなたが参照を追加する必要があることを言うのを忘れていました
essanousy

19

ConfigurationSettings.AppSettingsは非推奨です。こちらをご覧ください:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

とはいえ、それでも機能するはずです。

単なる提案ですが、アプリケーション構成が実行可能ファイルが使用している構成であることを確認しましたか?

デバッガーを接続して、次の値を確認してください。

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

そして、構成ファイルを開いて、セクションが期待どおりに存在することを確認します。


こんにちはBittercoderは、AppDomain.CurrentDomain.SetupInformation.ConfigurationFileの値を取得しようとすると、C:\\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.configを取得します。する
サティシュ

これは正しい構成ファイルです...予期していなかった可能性があります。実際、この場合、C:\ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.configはグローバル構成であると考えています。同様に名前を付けたExcel.EXE.configをアセンブリと同じディレクトリに配置すると、これはアプリの設定が読み込まれる場所。:詳細については、これらのリンクを参照してください dotnet247.com/247reference/msgs/56/281797.aspxの stackoverflow.com/questions/2288575/...
Bittercoder


7

この:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

私にとってはうまくいきます。

注意ConfigurationManagerしているSystem.Configuration名前空間(あなたがそうしたいでしょうので、using System.Configuration;文)、そしてあなたが読んだので、あなたは数としてそれを使用することで読んだもの解析する必要があります文字列型を持っています。

また、system.configuration.dllプロジェクトまたはビルドスクリプトで参照として設定してください。


ConfigurationManager.Appsettingsを取得するために追加する必要がある参照は何
ですか。Net2.0

1
への参照が必要System.Configuration.dllです。ConfigurationManager[OK]をする必要がありますので、このクラスは、.NET 2.0で追加されました。
マイケル・バー、2010年

7

理由は簡単です。あなたの呼び出しConfigurationSettings.AppSettingsは必要な設定ファイルを返していません。次のいずれかの方法をお試しください。

  • アプリの構成がアプリケーションのexeファイルと同じ名前であることを確認します-拡張子.configを追加します(例:MyApp.exe.config)。
  • または使用できます ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

お役に立てれば


3

プロジェクトを再構築してみてください- App.configビルドライブラリの「<YourProjectName.exe> .config」に内容をコピーします。


2

また、たとえばテストプロジェクトのApp.configで、アプリケーションを実行するApp.configにキー「StartingMonthColumn」を追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.