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>

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

646938 次浏览

试试这个:

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

这对我来说很管用:

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

我正在使用:

    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

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

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

我做了我认为很明显的事

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

在编译时,它总是返回null。

然而,这(从上面)是可行的:

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

有些答案似乎有点偏离我的看法

<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将是环境键+ " _email "的值

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

阅读配置:

您需要添加一个对Config的引用

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

保存到配置:

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

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。 最好的问候: 拉斐尔< / p >

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

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

你可以简单地输入:

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

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

在很长一段时间后回到这个话题…

鉴于ConfigurationManager的消亡,对于仍然在寻找这个尝试的答案的人(例如):

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

需要系统。当然是构型。

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

  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(“名称”)

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

或者你可以用

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


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

更新

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

在我的情况下,我必须在@System.Configuration.ConfigurationManager.AppSettings["key"]'的两侧抛出一个',以便它作为字符串读入我的程序。我使用Javascript,所以这是在我的标签。注意:ToString()不适合我。

你可以这样做:

string value1 = System.Configuration.ConfigurationManager.AppSettings.Get(0); //for the first key




string value2 = System.Configuration.ConfigurationManager.AppSettings.Get(1); //for the first key