从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”)同名。 “,等等...)
BrainSlugs83 2013年

@ BrianSlugs83感谢队友,我想知道为什么我的应用程序崩溃了。现在,到处搜寻两天后,答案就在评论中。我只有“ app.config”,没有“ MyProgram.exe.config”。
śmiglidigli

请查看stackoverflow.com/questions/1189364/…以获取解决方案。谢谢
Ariful Islam

Answers:


171

配置设置 .AppSettings过时,您应该改用Configuration Manager .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/zh-CN/library/system.configuration.configurationsettings.appsettings.aspx

也就是说,它仍然可以正常工作。

只是一个建议,但您是否已确认应用程序配置是可执行文件正在使用的配置?

尝试附加调试器并检查以下值:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

然后打开配置文件,并验证该部分是否在您期望的位置。


嗨,Bittercoder,当我尝试获取AppDomain.CurrentDomain.SetupInformation.ConfigurationFile的值时,我得到了C:\\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config,这不是我的配置文件...该怎么办?我愿意
Sathish

那是正确的配置文件...可能只是您没想到它。实际上,在这种情况下,我相信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的引用,我使用.Net 2.0 Framework
Sathish 2010年

1
您需要参考System.Configuration.dll。该ConfigurationManager班是在.NET 2.0中添加,所以你应该确定。
Michael Burr 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中添加键“ StartingMonthColumn”,例如在测试项目的App.config中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.