ConfigurationManager.AppSettings返回null

14

我在我的Windows应用程序中使用ConfigurationManager.AppSettings[myKey]从app.config文件读取值,但返回的值始终为null,即使该键存在且具有值,是否有人知道原因?

谢谢


只有你的代码才能讲述故事,把它发布出来吧(你是在相同的情况下检索吗?) - V4Vendetta
4个回答

25

一个更简单的替代方法是使用设置文件。这个文件封装了在设计器GUI中创建和维护App.config值,并生成访问这些值的代码。

要添加一个设置文件,在VS中右键单击您的项目,选择“添加->新项目”,选择“设置文件”并给它一个有意义的名称,例如MainSettings.settings。然后您可以添加一个项目,例如Foo,指定它是应用程序范围还是用户范围,定义它的类型并分配一个值。在您的代码中,您可以通过简单地编写MainSettings.Default.Foo来检索该值。

编译后,您可以通过编辑配置文件来更改值。设置将显示如下:

<applicationSettings>
    <YourNamespace.MainSettings>
        <setting name="Foo" serializeAs="String">
            <value>Bar</value>
        </setting>
    </YourNamespace.MainSettings>
</applicationSettings>

太棒了,@Adam。因为这个建议,我给你的声望值提升到了8000以上。干得好! - retrodrone
@retrodone - 谢谢!我刚从度假回来,第一次登录。 - Adam Ralph
当您手动更改配置时,它不会自动传播到VS中的设置。您必须转到属性并让其解决它们。 - Ε Г И І И О
让我来贡献!应用程序范围和用户范围的区别:链接 - Alvaro Rodriguez Scelza

9

从你提供的信息来看很难确定问题所在:

  1. 检查 myKey 中值的拼写是否正确
  2. 确保你正在查看正确的 app.config 文件——如果这个调用是在一个被引用的库中,并且你期望的值应该来自于调用项目的 app.config 文件,但是你的库却有一个 app.config 文件,那么这可能会导致你的问题。

我实际上只有一个app.config文件,我只是在调用ConfigurationManager.AppSettings[myKey],而且这个键存在!不确定为什么会发生这种情况。 - Hassan Mokdad
1
ConfigurationManager.AppSettings[myKey] 是 不区分大小写的; 刚刚编辑了这个答案。 - Chris

0
我在我的解决方案中有两个项目,首先我在类库项目中添加了app.config文件,所有实例都从控制台应用程序中调用,我在类库项目的配置文件中添加了这些条目。
<appSettings> 
<add key="userName" value="user2" /> 
<add key="emilsLimit" value="50" /> 
</appSettings>

当我在类库项目中获取这些内容时,它会抛出空异常,但是当我从类库项目中删除app.config并添加到控制台项目中时,它可以正常工作。干杯!

注意:控制台中已添加类库项目引用。


谢谢,那帮了很大的忙! - user8131020

-1

我曾经遇到过同样的问题,但是当我在末尾添加一个空字符串(+“”)时,它就可以在appsettings中获取到该字符串了。

例如:

string s = ConfigurationManager.AppSettings["myKey"] + "";

1
它不会,因为该值为空,它将具有空字符串。 - kirushan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接