AppSettings从.config文件中获取值

时间:2012-05-26 13:25:50

标签: c# .net appsettings configurationmanager

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

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>

你有什么建议吗?

15 个答案:

答案 0 :(得分:302)

这对我有用:

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

答案 1 :(得分:52)

dtsg给出的答案有效:

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

但是,您需要将程序集引用添加到

  

System.Configuration

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

Reference manager

以下是我的 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"];

答案 2 :(得分:20)

放手一搏:

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

答案 3 :(得分:15)

从配置中读取:

您需要添加对Config的引用

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

    保存到配置:

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

答案 4 :(得分: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 :(得分: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。 最好的祝福: 拉斐尔

答案 6 :(得分:2)

一些答案​​似乎有点偏离 IMO 这是我的拍摄大约2016年

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

确保引用System.Configuration

问题是要求

最肯定应该是

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

这是一个可以将值组合在一起的扭曲(不适用于此问题)

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

emails将是环境密钥+“_电子邮件”的价值

example :   jack@google.com;thad@google.com;

答案 7 :(得分:2)

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

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

答案 8 :(得分:2)

很长一段时间后回到这个......

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

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

当然需要System.Configuration。

(将代码编辑为实际可行且易于阅读的内容)

答案 9 :(得分:1)

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

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

虽然编译它总是返回null。

然而(从上面)起作用:

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

或者您可以使用

string value = system.configuration.ConfigurationManager.AppSettings.Get("ClientsFilePath");

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection

答案 12 :(得分:0)

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

答案 13 :(得分:0)

您只需输入:

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

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

答案 14 :(得分: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

OR

Properties.Settings.Default [“ name”]