从 app.config 文件中读取

Posted

技术标签:

【中文标题】从 app.config 文件中读取【英文标题】:reading from app.config file 【发布时间】:2011-01-24 21:35:03 【问题描述】:

我正在尝试阅读 StartingMonthColumn 和 CategoryHeadingColumn 从下面的 app.config 文件中使用代码

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 文件夹运行应用程序?否则,请在运行清理后更改配置并重建代码。 文件不是命名为“app.config”对吧?它肯定在你的项目中被命名,但在应用程序输出目录中,它应该被命名为与你的输出二进制文件+“.config”相同的东西(比如“MyLibrary.dll.config”或“MyProgram.exe.config” "等...) @BrianSlugs83 谢谢队友,我想知道为什么我的应用程序崩溃了。现在,经过两天的到处搜索,答案在评论中。我只有“app.config”,没有“MyProgram.exe.config”。 请查看***.com/questions/1189364/… 以获得解决方案。谢谢 【参考方案1】:

ConfigurationSettings.AppSettings 已过时,您应该改用ConfigurationManager.AppSettings(您需要添加对System.Configuration 的引用)

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

如果您在阅读应用设置时仍有问题,请检查您的 app.config 文件是否命名正确。具体来说,它应该根据正在执行的程序集命名,即MyApp.exe.config,并且应该与MyApp.exe位于同一目录中。

【讨论】:

如果 ConfigurationSettings.AppSettings["StartingMonthColumn"] 返回 null 或空字符串,我怀疑 Int32.Parse 在尝试解析该值时会抛出异常。 @bittercoder,是的,但是,您的 app.config 文件应该始终具有正确的配置。如果 OP 想要在其中添加某种形式的处理,即 TryParse ,那么无论如何他们都可以。然而,这不是问题所在。 请注意,您还可以通过 Settings.Default.* 访问值的强类型版本(即,在本例中为 Settings.Default.StartingMonthColumn)。跨度> @BrainSlugs83 请注意,您会将 user 设置与应用设置混淆。如果您想对应用设置进行强类型访问,则需要实现自定义 ConfigurationSection 这是不正确的,无论值的范围是“用户”还是“应用程序”,它都会从 app.config 中提取值(从 GUI 设计器中,您可以为每个设置选择范围) .【参考方案2】:

只是为了将来参考,您只需将System.Configuration 添加到您的参考资料库中:

【讨论】:

你的答案比这里的第一个答案好,大家忘了说你要加个参考 我是从 nuget 安装的,但它不起作用。很高兴我尝试了这个建议。【参考方案3】:

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***.com/questions/2288575/…【参考方案4】:

试试:

string value = ConfigurationManager.AppSettings[key];

更多详情请查看: Reading Keys from App.Config

【讨论】:

【参考方案5】:

原因很简单,您对ConfigurationSettings.AppSettings 的调用没有返回所需的配置文件。请尝试以下任一方法:

确保您的应用配置与应用的 exe 文件同名 - 附加扩展名 .config,例如 MyApp.exe.config 或者你可以使用ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

希望对你有帮助

【讨论】:

【参考方案6】:

这个:

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

对我来说很好。

请注意,ConfigurationManager 位于 System.Configuration 命名空间中(因此您可能需要 using System.Configuration; 语句),并且由于您读入的内容具有字符串类型,因此您需要解析您读入的内容将其用作数字。

另外,请确保在项目或构建脚本中将 system.configuration.dll 设置为引用。

【讨论】:

我使用 .Net 2.0 Framework 应该添加什么参考以获得 ConfigurationManager.Appsettings 您需要引用System.Configuration.dllConfigurationManager 类是在 .NET 2.0 中添加的,所以应该没问题。【参考方案7】:

尝试重建您的项目 - 它将App.config 的内容复制到 构建库中的“.config”。

【讨论】:

【参考方案8】:

还在运行应用程序的 App.config 中添加键“StartingMonthColumn”,例如在测试项目的 App.config 中。

【讨论】:

以上是关于从 app.config 文件中读取的主要内容,如果未能解决你的问题,请参考以下文章

使用 App.Config 在 Windows 服务中的 WCF 命名管道

C# Windows 服务 - 从 ini 或 App.config 文件中读取

从 .NET 中的 app.config 或 web.config 读取设置

Windows 服务安装程序未读取 App.Config 文件

如何让 ConfigurationManager 读取 app.config 以外的配置文件?

Windows 服务无法从 App.config 读取参数