AppSettings从.config文件中获取值

问题描述 投票:154回答:14

我无法访问配置文件中的值。

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>

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

c# .net appsettings configurationmanager
14个回答
307
投票

这对我有用:

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

2
投票

经过很长一段时间回到这一个......

鉴于ConfigurationManager的消亡,对于仍在寻找此尝试答案的任何人(例如):

AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));

当然需要System.Configuration。

(将代码编辑为实际工作且更易于阅读的内容)


1
投票

你可以简单地输入:

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

因为key是一个对象而AppSettings是一个字符串


1
投票
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];

0
投票

我的简单测试也失败了,遵循其他答案的建议 - 直到我意识到我添加到桌面应用程序的配置文件被命名为“App1.config”。我将其重命名为“App.config”,一切都立即起作用了。


0
投票
  1. 在项目中打开“属性”
  2. 转到“设置”标签
  3. 添加“名称”和“值”

代码将自动生成

    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup ..." ... >
          <section name="XX....Properties.Settings" type="System.Configuration.ClientSettingsSection ..." ... />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <XX....Properties.Settings>
          <setting name="name" serializeAs="String">
            <value>value</value>
          </setting>
          <setting name="name2" serializeAs="String">
            <value>value2</value>
          </setting>
       </XX....Properties.Settings>
      </applicationSettings>
    </configuration>

获得价值

properties.settings.default.name

要么

Properties.Settings.Default [ “名称”]


53
投票

dtsg给出的答案有效:

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

但是,您需要添加一个程序集引用

系统配置

转到解决方案资源管理器,右键单击“引用”,然后选择“添加引用”。选择“程序集”选项卡,然后搜索“配置”。

这是我的App.config的一个例子:

<?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"];

20
投票

放手一搏:

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

15
投票

从配置中读取:

您需要添加对Config的引用

  1. 在项目中打开“属性”
  2. 转到“设置”标签
  3. 添加“名称”和“值”
  4. 使用以下代码获取价值:
string value = Properties.Settings.Default.keyname;

保存到配置:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();

6
投票

我在用:

    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"];

其中value1 = ...和value3 = ...给出null,value2 = ......有效

然后我决定用以下内容替换内部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


5
投票

app/web.config文件中设置以下配置:

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

然后你可以通过输入以下代码来访问代码:

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

*请注意,此工作适用于.net4.5.x.net4.6.x;但不适用于.net core。最好的问候:拉斐尔


2
投票

看到我做了我认为显而易见的事情:

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将是环境关键+“_电子邮件”的价值

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

2
投票

对于Web应用程序,我通常会编写此方法并使用密钥调用它。

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }
© www.soinside.com 2019 - 2024. All rights reserved.