使用类库从 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 获取配置设置的主要内容,如果未能解决你的问题,请参考以下文章

在内网使用Gradle构建Android Studio项目

在 3.5 而不是 2.0 中编译的类库 - 从 Visual Studio 2008 迁移到 2013

Microsoft.SqlServer.Types 与 .NET 标准不兼容

使用 SSH.NET 库从 SFTP 下载文件

使用 agsxmpp 库从 xml 节点获取信息

使用 Boost 库从 C++ 中的 JSON 检索内容