2012-05-26 42 views
110

我无法访问配置文件中的值。AppSettings从.config文件获取值

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
var clientsFilePath = config.AppSettings.Settings["ClientsFilePath"].Value; 
// the second line gets a NullReferenceException 

config文件

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <!-- ... --> 
    <add key="ClientsFilePath" value="filepath"/> 
    <!-- ... --> 
    </appSettings> 
</configuration> 

你有什么建议,我该怎么办?

回答

230

这个工作对我来说:

string value = System.Configuration.ConfigurationManager.AppSettings[key]; 
+11

我试过这个方法,但是我得到了空字符串。 – Matt

+1

请参阅:http://stackoverflow.com/a/10718733/730701 – Adam

+0

我不明白。你认为我没有访问配置文件吗? – Matt

18

这给一展身手:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"]; 
+2

这个方法我试过,但我得到了空字符串。 – Matt

+4

您的实施必须是不正确的。这绝对适用于从配置文件中检索关键值。 – dtsg

3

我使用:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap(); 
    //configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension"; 
    configMap.ExeConfigFilename = AppDomain.CurrentDomain.BaseDirectory + ServiceConstants.FILE_SETTING; 
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); 
    value1 = System.Configuration.ConfigurationManager.AppSettings["NewKey0"]; 
    value2 = config.AppSettings.Settings["NewKey0"].Value; 
    value3 = ConfigurationManager.AppSettings["NewKey0"]; 

其中值1 = ...值3 = ...给出null和值2 = ...工作

然后,我决定更换内部的app.config:

// Note works in service but not in wpf 
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"d:\test\justAConfigFile.config.whateverYouLikeExtension"); 
ConfigurationManager.RefreshSection("appSettings"); 

string value = ConfigurationManager.AppSettings["NewKey0"]; 

使用VS2012的.NET 4

0

我简单的测试也失败了,以下的建议另一个答案在这里 - 直到我意识到我添加到我的桌面应用程序的配置文件被命名为“App1.config”。我将它重命名为“App.config”,并且一切都立即按照它应该的方式工作。

33

是dtsg给作品答案:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"]; 

,但你需要一个集引用

System.Configuration

转到添加到您的解决方案资源管理器右键点击上的参考文献和选择添加参考文献。选择组件选项卡并搜索配置

Reference manager

这里是我的应用的一个例子。配置

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <appSettings> 
    <add key="AdminName" value="My Name"/> 
    <add key="AdminEMail" value="MyEMailAddress"/> 
    </appSettings> 
</configuration> 

,您可以通过以下方式获得:

string adminName = ConfigurationManager.AppSettings["AdminName"]; 
+2

我似乎有与OP相同的问题。使用VS2015。我不知道如何或为什么,但是我对System.Configuration的引用说'System.configuration'(小写)。 – Tim

1

见我做了我认为是很明显的事情是:

string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString(); 

虽然总是对它进行编译返回null。

然而,这(从上面)工作原理:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"]; 
2

一些问题的答案似乎有点过IMO这是我拿大约2016

<add key="ClientsFilePath" value="filepath"/> 

确保System.Configuration是引用。

问题是要求一个的AppSettings 关键的

完全可以肯定应该是

string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"] 

    //yourKeyValue should hold on the HEAP "filepath" 

这里是一个扭曲中,你可以组在一起值(不适用于这个问题)

var emails = ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["Environment"] + "_Emails"]; 

emails将Env的值ironment键+ “_Emails”

example : [email protected];[email protected]; 
10

阅读从配置:

你需要参考您的项目

  • 转到“添加到配置

    1. 打开 ”属性“设置“标签
    2. 添加”名称“和”值“
    3. 使用以下代码获取值:

      string value = Properties.Settings.Default.keyname;

    保存到配置:

    Properties.Settings.Default.keyName = value; 
        Properties.Settings.Default.Save(); 
    
  • +1

    如上所述,如果您在项目属性的“设置”选项卡中添加值,那么使用ConfigurationManager的所有其他答案都不起作用,这非常有帮助。谢谢。 –

    +0

    这也适用于我。我得到了一个带有上述建议的'null'字符串,但是'Properties.Settings.Default。 '像一个魅力工作! –

    2

    在应用程序/网络config文件设置以下配置:

    <configuration> 
        <appSettings> 
        <add key="NameForTheKey" value="ValueForThisKey" /> 
        ... 
        ...  
        </appSettings> 
    ... 
    ... 
    </configuration> 
    

    ,那么你可以通过将这个访问这个在你的代码line:

    string myVar = System.Configuration.ConfigurationManager.AppSettings["NameForTheKey"]; 
    

    *注意t这对于.net4.5.x和.net4.6.x的工作很好。但不适用于.net核心。 此致敬礼: 拉斐尔

    2

    对于Web应用程序,我通常会写这个方法,只是调用它的关键。

    private String GetConfigValue(String key) 
        { 
         return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString(); 
        } 
    
    0

    您可以简单地输入:

    string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()]; 
    

    因为key是一个对象,AppSettings需要一个字符串