使用类库从web.config/app.config获取配置设置

14

在3.5中的配置设置让我感到很烦恼... 求助!;)

我有一个类库(名为ADI),需要从使用它的项目中获取一些配置设置(如连接字符串、文件系统位置等)。

我希望像其他设置一样,在我的Windows Forms/Web项目的App.Config或Web.Config中定义这些设置。

以下是我的Windows Forms应用程序的一部分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")

该怎么做?

4个回答

23

如果你不需要结构化的设置,那么 appSettings 部分只需要提供键值对:

<appSettings>
  <add key="ADIImageRoot" value="C:\DataTemp\ADI\Original\" />
  <add key="ADIImageVariantsRoot" value="C:\DataTemp\ADI\Variants\" />
</appSettings>

这将使你能够通过AppSettings字典访问它们:

ConfigurationManager.AppSettings["ADIImageVariantsRoot"]

正如你所预期的那样。

或者,如果你需要更多结构化的配置(即不仅仅是字符串或设置的集合),你可以考虑使用自己的配置部分,使用ConfigurationSection及其相关部分。


1
我决定切换回使用旧的appsettings - 这样可以正常工作。我还编写了一个包装器来检查它是否存在,如果不存在则抛出错误。 - Kjensen
是的 - 如果未提供参数,抛出ArgumentNullException可能是解决问题的途径。 - Zhaph - Ben Duguid
@alperebicoglu 我不认为它们是重复的:这个问题知道差异并想知道如何从适当的配置文件中移动和读取设置,而另一个问题则想知道表单(app.config)或ASP.NET(web config)配置文件之间的区别。 - Zhaph - Ben Duguid

2

看起来你正在使用 Visual Studio 中内置的设置。这会生成一个与文件相关的包装类,称为在你的情况下是 MySettings

因此,你可以编写像 MySettings.Instance.ADIImageVariantsRoot 这样的内容。(如果你在项目工具箱中点击“显示所有文件”,它会显示 .settings.cs 文件,你可以看到所有细节)


1
OP(和我)想知道如何从类库中读取设置。 - Tuan
@Code Blue:感谢您的评论。在这种情况下,将.settings(生成的代码也会跟随)移动到该类库中,但请确保将放入库的app.config中的设置(如果有)复制到exe的app.config中。(没有很好的方法可以自动同步默认值到外部项目) - Ruben Bartelink

2

添加引用 System.web; 添加命名空间和用户

using System.Web.Configuration;    

String webConfigValue;
            webConfigValue = WebConfigurationManager.AppSettings["employeeDB"].ToString();

读取web配置值

<appSettings>
        <add key="employeeDB" value="Data Source=servername;Initial Catalog=employee;Persist Security Info=True;User ID=userid;Password=password;"/>        
</appSettings>

0

关于ApplicationSettings,您应该使用:

[YourNamespace].Properties.Settings.Default.[YourSettingName]

这提供了一个强类型引用到您的设置,并在web.config文件中未定义默认值时返回默认值。对于AppSettings,您应该使用:

System.Web.Configuration.WebConfigurationManager.AppSettings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接