与类库一起使用app.config

我经常需要创build一个.Net类库,它需要一个app.config来处理诸如数据库连接string之类的东西。 但是,这些设置必须位于调用应用程序的app.config或web.config中。 如果我想将DLL分布到多个应用程序中,这会变成一个痛苦,因为我必须将这些设置复制到每个应用程序的app.config中。

我已经考虑通过代码从类库中手动读取configuration设置,但这也是一个很大的麻烦。 有没有人有任何build议加载类库中的app.config设置的最佳方式?

你可以做的一件事就是为你的库设置一个单独的设置文件,然后你只需在你的入口应用程序configuration文件中引用它。

有关此信息,请参阅此问题中 接受的答案 。

我知道这不是你想听到的,但入口点的configuration文件是放置这些设置的合理地方。 如果每个库都需要自己的configuration文件,那么编辑每一个文件而不是一个文件就会很繁琐。

我会有一个默认设置作为你的库(作为项目的一部分)的默认设置的文本文件,它可以与默认设置configuration库(它可以被复制并粘贴到configuration文件)分发。

让每个类库在自定义的ConfigurationSection中定义configuration设置。

然后将自定义节处理程序添加到您的process.exe.config文件。

这个MSDN文章是相当全面的解释,在VB和C#中的例子。

它涉及到编写一些相当重复的代码–Dmitryr已经创build了这个工具来从XMLconfiguration的一个片段生成configuration部分,这可能会有所帮助。

这是一个替代scheme。

而不是试图find方法来“合并”你的app.configs,甚至放置configuration项在您的DLL(并试图解决什么是“devise”),试试这个:

创build你的DLL,但是你需要一个Config Item,创build一个公共属性。 当您在DLL中实例化类时,可以使用拥有的应用程序中的configuration项来填充这些属性。

现在configuration在所有者级别进行pipe理,并且DLL是可移植的,因为您必须在运行时将所需的信息传递给它。

没有更多的DLL.config!

对每个类库使用它自己的configuration文件没有(大)问题。 如果您使用vb.net,则可以通过“设置”页面上的“我的项目”面板添加值。

你唯一需要做的就是在你的类库设置(不仅仅是你的主应用程序设置文件)上调用“My.Settings.Save”。

这也适用于C#(但可能需要更多的手动工作)。

如果您使用NUnit ,请将您的app.config文件命名为* .nunit项目文件名。 例如,如果你调用了你的项目“ClassLibraryA.nunit”,那么将你的类库configuration文件命名为“ClassLibraryA.config”。 他们还需要驻留在相同的文件夹/目录中。 NUnit实际上是使用这个作为主要的configuration文件。

如果您有自定义代码 ,那么您需要确保您的app.config(或web.config)引用了类库的app.config文件。 该应用程序只关心根app.config或web.config。 所以你需要添加一个指向类库app.config的自定义configuration部分。

您可以创build自己的XML文件(如果需要,可以将其称为appConfig.xml),使用System.Xml而不是System.Configuration来读取它,并将其包含在您的dll中。

转到应用程序属性 – >设置选项卡; 在那里添加你的设置。

使用Properties.Settings.Default.<SettingName>来访问设置。 而已!

用不同的解决scheme创build你的类库。 如果您将它们保留在同一个解决scheme中,则最高层次结构中的app.config将被读取。