我工作的一个C#类库,它需要能够读取来自设置web.config
或app.config
的文件(根据是否DLL从ASP.NET Web应用程序中引用或Windows窗体应用程序)。
我发现,
ConfigurationSettings.AppSettings.Get("MySetting")
工作,但被微软视为不提倡使用的代码已经被标记。
我读过,我应该使用:
ConfigurationManager.AppSettings["MySetting"]
然而, System.Configuration.ConfigurationManager
类似乎并没有提供从C#类库项目。
有谁知道做到这一点的最好办法是什么?
Answer 1:
你将需要添加一个参考 System.Configuration
在你的项目的引用文件夹中 。
你绝对应该使用ConfigurationManager
在过时的ConfigurationSettings
。
Answer 2:
对于样品的App.config象下面这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="countoffiles" value="7" />
<add key="logfilelocation" value="abc.txt" />
</appSettings>
</configuration>
您阅读使用代码上面的应用程序设置如下图所示:
using System.Configuration;
你也可能还需要增加一个参考System.Configuration
在您的项目,如果没有一个了。 然后,您可以访问像这样的价值观:
string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];
希望这可以帮助!
Answer 3:
更新框架4.5和4.6; 以下将不再起作用:
string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];
现在,通过属性访问设置类:
string keyvalue= Properties.Settings.Default.keyname;
请参阅管理应用程序设置以获取更多信息。
Answer 4:
右键单击您的类库,并从菜单中选择“添加引用”选项; 最后从.NET选项卡,选择System.Configuration。 这将包括System.Configuration DLL到您的项目。
Answer 5:
IM使用这一点,它很适合我
textBox1.Text = ConfigurationManager.AppSettings["Name"];
Answer 6:
阅读从配置:
你将需要添加到配置参考
- 你的项目打开“属性”
- 进入“设置”选项卡
- 添加“名称”和“值”
获得值使用下面的代码:
字符串值= Properties.Settings.Default.keyname;
保存到配置:
Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();
Answer 7:
您必须添加到项目中的System.Configuration程序集的引用。
Answer 8:
你可能会添加App.config文件到一个DLL。 App.Config中仅适用于可执行的项目,因为所有的DLL采取从配置文件中的配置对于正在执行的exe文件。
比方说,你在你的解决方案两个项目:
你的问题可能是相关型号给你,包括在app.config到SomeDLL而不是SomeExe的事实。 SomeDll是能够从SomeExe项目中读取配置。
Answer 9:
试试这个:
string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];
在web.config中应该是一个结构:
<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
Answer 10:
我有同样的问题,只是读取它们是这样的:
System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
Answer 11:
web.config
中使用的Web应用程序。 web.config
默认情况下,先后为Web应用程序所需的多种配置。 你可以有一个web.config
下您的Web应用程序的每个文件夹。
app.config
用于Windows应用程序。 当您在vs.net构建应用程序,它会自动重命名为<appname>.exe.config
并且此文件必须与应用程序一起交付。
你可以用同样的方法来调用app settings
从两个配置文件值:
System.Configuration.ConfigurationSettings.AppSettings["Key"]
Answer 12:
我强烈建议你创建此调用的包装。 有点像ConfigurationReaderService
和使用依赖注入来获得这个类。 这样,您就能够隔离此配置文件用于测试目的。
所以使用ConfigurationManager.AppSettings["something"];
建议并返回该值。 你可以用这个方法来创建某种默认返回如果没有在config文件可用键。
Answer 13:
此外,您还可以使用formo :
配置:
<appSettings>
<add key="RetryAttempts" value="5" />
<add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>
码:
dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts; // returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10); // returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10); // returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();
Answer 14:
因为我发现最好的方法通过使包装类在System.Configuration如下访问系统的方式应用程序设置变量
public class BaseConfiguration
{
protected static object GetAppSetting(Type expectedType, string key)
{
string value = ConfigurationManager.AppSettings.Get(key);
try
{
if (expectedType == typeof(int))
return int.Parse(value);
if (expectedType == typeof(string))
return value;
throw new Exception("Type not supported.");
}
catch (Exception ex)
{
throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
key, expectedType), ex);
}
}
}
现在,我们可以使用另一个类,如下硬编码名称访问所需的设置变量
public class ConfigurationSettings:BaseConfiguration
{
#region App setting
public static string ApplicationName
{
get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
}
public static string MailBccAddress
{
get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
}
public static string DefaultConnection
{
get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
}
#endregion App setting
#region global setting
#endregion global setting
}
Answer 15:
只是为了完整性,有仅适用于Web项目的另一种选择:
System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]
这样做的好处是,它不需要额外的参考如此添加可能是优选的一些人。
Answer 16:
第1步:引用选项卡上单击鼠标右键添加引用。
步骤2:点击组件选项卡上
步骤3:搜索“System.Configuration”
第4步:单击确定。
然后,它会工作
string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];
Answer 17:
我一直在努力,现在找到了同样的问题几天修复。 我能够通过增加在web.config的AppSettings的标签中的一个关键解决这个问题。 这应该使用助手时覆盖.dll文件。
<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
Answer 18:
我总是创建申报所有配置值类型安全性的IConfig接口。 一个配置实现类,然后包装来System.Configuration呼叫。 您的所有来电System.Configuration现在是在一个地方,这样更容易和更清洁维护并跟踪其正在使用,并宣布其默认值的字段。 我写了一组私人辅助方法来读取和解析常用数据类型。
使用IoC框架,你可以通过简单的界面传递给类构造函数的任何地方访问IConfig字段中输入您的应用程序。 你还那么能够在单元测试中创造了IConfig接口的模拟实现,所以你现在就可以测试各种配置值和值组合,而无需触摸你的App.config或Web.config文件。
Answer 19:
另一种可能的解决方案:
var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
Answer 20:
请检查你正在.NET版本。 它应该是高于4你必须System.Configuration系统库添加到您的应用程序
Answer 21:
您可以使用下面一行,在我的情况下,它是工作:
System.Configuration.ConfigurationSettings.AppSettings["yourKeyName"]
你必须要小心,上面的代码行也是旧版本及其在新库已过时。
Answer 22:
这里有一个例子: App.config
<applicationSettings>
<MyApp.My.MySettings>
<setting name="Printer" serializeAs="String">
<value>1234 </value>
</setting>
</MyApp.My.MySettings>
</applicationSettings>
Dim strPrinterName as string= My.settings.Printer
文章来源: Reading settings from app.config or web.config in .net