使用类库从 web.config/app.config 获取配置设置
Posted
技术标签:
【中文标题】使用类库从 web.config/app.config 获取配置设置【英文标题】:Getting configuration settings from web.config/app.config using class library 【发布时间】:2010-10-15 16:13:49 【问题描述】:3.5 中的配置设置让我抓狂......救命! ;)
我有一个类库(命名为 ADI),它需要使用它的项目中的一些配置设置(如连接字符串、文件系统位置等)。
我想在我的 Windows 窗体/Web 项目 App.Config 或 Web.Config 中定义这些设置,就像其他设置一样。
这是我的 Windows 窗体应用程序的 app.config 的一部分:
<applicationSettings>
<PhotoImportRobot.My.MySettings>
<setting name="ADIImageRoot" serializeAs="String">
<value>C:\DataTemp\ADI\Original\</value>
</setting>
<setting name="ADIImageVariantsRoot" serializeAs="String">
<value>C:\DataTemp\ADI\Variants\</value>
</setting>
</PhotoImportRobot.My.MySettings>
</applicationSettings>
如何从我的类库中访问它??
我试过了:
System.Configuration.ConfigurationManager.AppSettings("ADIImageVariantsRoot")
怎么办?
【问题讨论】:
【参考方案1】:如果您不关注结构化设置,则 appSettings 部分仅采用键值对:
<appSettings>
<add key="ADIImageRoot" value="C:\DataTemp\ADI\Original\" />
<add key="ADIImageVariantsRoot" value="C:\DataTemp\ADI\Variants\" />
</appSettings>
这将使您能够通过 AppSettings 字典访问它们:
ConfigurationManager.AppSettings["ADIImageVariantsRoot"]
如你所料。
或者,如果您需要更多的配置结构(即不仅仅是字符串或设置集合),您可以考虑使用自己的配置部分,使用ConfigurationSection 及其相关部分。
【讨论】:
我决定改用旧的 appsettings - 这很有效。我还写了一个包装器来检查它是否存在,如果不存在则抛出错误。 是的 - 如果不提供 ArgumentNullException 可能是最好的方法。 @alperebicoglu 我不相信它们是重复的:这个知道区别并且想知道如何从适当的配置文件中移动和读取设置,而另一个想知道什么表单 (app.config) 或 ASP.NET (web config) 配置文件之间的区别。【参考方案2】:您似乎正在使用 Visual Studio 中内置的设置。这会生成一个与文件相关的包装类,在您的情况下称为 MySettings
。
因此,您可以编写类似MySettings.Instance.ADIImageVariantsRoot
的内容。 (如果您点击项目工具箱中的显示所有文件,它将显示 .settings.cs 文件,您可以看到所有血淋淋的细节)
【讨论】:
OP(和我)想知道如何从类库中读取设置。 @Code Blue:感谢您的评论。在这种情况下,将 .settings(生成的代码将随之而来)移动到所述类库中,但请确保将放入库的 app.config 中的设置(如果有)复制到您的 exe 的 app.config 中。 (没有很好的方法让它自动将默认值同步到外部项目)【参考方案3】:添加参考System.web;
添加名称空间和用户
using System.Web.Configuration;
String webConfigValue;
webConfigValue = WebConfigurationManager.AppSettings["employeeDB"].ToString();
读取网络配置值
<appSettings>
<add key="employeeDB" value="Data Source=servername;Initial Catalog=employee;Persist Security Info=True;User ID=userid;Password=password;"/>
</appSettings>
【讨论】:
【参考方案4】:对于 ApplicationSettings 你应该使用:
[YourNamespace].Properties.Settings.Default.[YourSettingName]
这提供了对您的设置的强类型引用,如果未在 web.config 文件中定义,则返回默认值。对于 AppSettings,您应该使用:
System.Web.Configuration.WebConfigurationManager.AppSettings
【讨论】:
以上是关于使用类库从 web.config/app.config 获取配置设置的主要内容,如果未能解决你的问题,请参考以下文章
在 3.5 而不是 2.0 中编译的类库 - 从 Visual Studio 2008 迁移到 2013