Reading settings from app.config or web.config in .net
我正在开发一个C类库,它需要能够从
我发现
1 | ConfigurationSettings.AppSettings.Get("MySetting") |
有效,但该代码已被Microsoft标记为已弃用。
我已经读到我应该使用:
1 | ConfigurationManager.AppSettings["MySetting"] |
然而,
有人知道最好的方法是什么吗?
对于下面的app.config示例:
1 2 3 4 5 6 7 | <?xml version="1.0" encoding="utf-8" ?> <configuration> </appSettings> </configuration> |
您可以使用以下代码阅读以上应用程序设置:
1 | using System.Configuration; |
如果您的项目中还没有
1 2 | string configvalue1 = ConfigurationManager.AppSettings["countoffiles"]; string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"]; |
希望这有帮助!
您需要在项目的"引用"文件夹中添加对
您肯定应该使用
更新框架4.5和4.6;以下内容将不再有效:
1 | string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"]; |
现在通过属性访问设置类:
1 | string keyvalue= Properties.Settings.Default.keyname; |
有关详细信息,请参见管理应用程序设置。
右键单击类库,然后从菜单中选择"添加引用"选项;最后从.NET选项卡中选择System.Configuration。这将在项目中包含System.Configuration dll。
我用这个,它对我很好
1 | textBox1.Text = ConfigurationManager.AppSettings["Name"]; |
必须向项目中添加对System.Configuration程序集的引用。
型
从配置读取:
您需要添加对config的引用
百万千克1打开项目的"属性"百万千克1百万千克1转到"设置"选项卡百万千克1百万千克1添加"name"和"value"百万千克1百万千克1
使用以下代码获取值:
字符串值=properties.settings.default.keyname;
百万千克1
保存到配置:
1 2 | Properties.Settings.Default.keyName = value; Properties.Settings.Default.Save(); |
您可能正在将app.config文件添加到dll。app.config仅适用于可执行项目,因为所有dll都从正在执行的exe的配置文件中获取配置。
假设您的解决方案中有两个项目:
- 索德尔
- 某物
您的问题可能与您将app.config包含到somedll而不是someexe的事实有关。somedll能够从someexe项目读取配置。
试试这个:
1 | string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"]; |
在web.config中应该是下一个结构:
1 2 3 4 5 | <configuration> </appSettings> </configuration> |
我也有同样的问题,请这样读:
1 | System.Configuration.ConfigurationSettings.AppSettings["MySetting"] |
您可以使用相同的方法从两个配置文件调用
1 | System.Configuration.ConfigurationSettings.AppSettings["Key"] |
我强烈建议您为此调用创建一个包装器。类似于
因此,使用建议的
型
正如我发现的,通过在system.configuration上创建包装类,以系统方式访问应用程序设置变量的最佳方法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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); } } } |
号
现在,我们可以使用下面的另一个类,通过硬编码名称访问所需的设置变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 } |
此外,您还可以使用formo:
配置:
1 | </appSettings> |
代码:
1 2 3 4 5 | 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>(); |
为了完整起见,还有另外一个选项只适用于Web项目:
1 | System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"] |
这样做的好处是,它不需要添加额外的引用,因此对某些人来说可能更可取。
型
步骤1:右键单击"引用"选项卡以添加引用。
步骤2:单击"部件"选项卡
步骤3:搜索"system.configuration"
第四步:点击确定。
那就行了
1 | string value = System.Configuration.ConfigurationManager.AppSettings["keyname"]; |
我总是使用为所有配置值声明的类型安全属性创建IConfig接口。然后,配置实现类包装对System.Configuration的调用。所有的system.configuration调用现在都在一个地方,这样维护和跟踪哪些字段正在被使用,并声明它们的默认值就更加容易和清晰了。我编写了一组私有助手方法来读取和解析公共数据类型。
使用IOC框架,只需将接口传递给类构造函数,就可以访问应用程序中任何位置的IConfig字段。然后,您还可以在单元测试中创建IConfig接口的模拟实现,这样您就可以测试各种配置值和值组合,而无需触摸app.config或web.config文件。
另一个可能的解决方案:
1 2 |
几天来,我一直在努力寻找解决这个问题的方法。我可以通过在web.config的appsettings标记中添加一个键来解决这个问题。在使用帮助程序时,这应该覆盖.dll。
1 2 3 4 5 6 | <configuration> </appSettings> </configuration> |
型
请检查你正在工作的.NET版本。它应该高于4。您必须将System.Configuration系统库添加到应用程序中
型
您可以使用下面的行,在我的情况下,它是工作的:
1 | System.Configuration.ConfigurationSettings.AppSettings["yourKeyName"] |
。
您必须注意,上面的代码行也是旧版本,在新库中不推荐使用。
型
例如:
1 2 3 4 5 6 7 | <MyApp.My.MySettings> <setting name="Printer" serializeAs="String"> <value>1234 </value> </setting> </MyApp.My.MySettings> </applicationSettings> Dim strPrinterName as string= My.settings.Printer |
。