【问题标题】:Getting configuration settings from web.config/app.config using class library使用类库从 web.config/app.config 获取配置设置
【发布时间】: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")

怎么办?

【问题讨论】:

    标签: asp.net vb.net .net-3.5


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 2016-06-21
        • 2014-10-11
        • 2013-01-09
        相关资源
        最近更新 更多