从 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
的调用没有返回所需的配置文件。请尝试以下任一方法:
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.dll
。 ConfigurationManager
类是在 .NET 2.0 中添加的,所以应该没问题。【参考方案7】:
尝试重建您的项目 - 它将App.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 文件