195

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

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>

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

4

16 回答 16

395

这对我有用:

string value = System.Configuration.ConfigurationManager.AppSettings[key];
于 2012-05-26T13:30:49.960 回答
68

dtsg 给出的答案有效:

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

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

系统配置

转到您的解决方案资源管理器右键单击References 并选择Add reference。选择Assemblies选项卡并搜索Configuration

参考经理

这是我的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"];
于 2015-03-20T13:15:27.620 回答
21

试一试:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];
于 2012-05-26T13:28:34.427 回答
19

从配置中读取:

您需要添加对 Config 的引用

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

保存到配置:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();
于 2016-08-07T12:34:28.350 回答
8

我在用:

    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

于 2014-04-30T06:54:37.540 回答
5

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

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

然后您可以通过输入以下行在代码中访问它:

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

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

于 2017-02-23T14:30:08.227 回答
3

时隔许久回到这个...

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

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

当然需要 System.Configuration。

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

于 2018-04-30T11:20:44.283 回答
2

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

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

虽然编译它总是返回null。

然而,这(从上面)有效:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];
于 2015-06-01T15:34:02.577 回答
2

一些答案似乎有点离海事组织 这是我在 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将是 Environment Key + "_Emails" 的值

example :   jack@google.com;thad@google.com;
于 2016-06-02T21:42:23.720 回答
2

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

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }
于 2017-05-15T08:30:29.303 回答
1

您可以简单地键入:

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

因为key是一个对象并AppSettings接受一个字符串

于 2017-11-14T08:47:44.827 回答
1
  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"]

于 2019-04-09T13:00:18.910 回答
1
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];
于 2019-06-03T17:37:39.647 回答
1

或者你可以使用

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

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection
于 2019-10-11T11:11:44.693 回答
0

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

于 2014-08-29T19:11:52.650 回答
0

更新

ConfigurationManager 已过时,需要在.NET Сore 环境中使用IConfiguration(IConfiguration 由.NET Core 内置依赖注入提供)。

    private readonly IConfiguration config;

    public MyConstructor(IConfiguration config)
    {
        this.config = config;
    }
    public void DoSomethingFunction()
    {
        string settings1 = config["Setting1"];
    }
于 2021-12-13T15:25:37.283 回答