.NET 3.5 DLL使用自己的配置文件

时间:2009-10-09 14:46:46

标签: .net-3.5 dll configuration-files

我需要一个.NET 3.5 DLL有自己的配置文件。可以从许多不同的应用程序调用此DLL,因此存储在配置文件中的信息(如连接字符串)需要保存在DLL可以引用的配置文件中。我想要的是当使用DLL时,我需要“切换”用于引用信息的配置文件作为DLL配置文件。然后,当使用配置信息完成DLL时,交换机将恢复为默认值。 DLL是使用.NET 3.5编写的。我一直在寻找如何做到这一点,我一直在寻找的是如何将信息与exe的app.config文件合并。在我的情况下,我不知道这个DLL将如何用于修改任何exe的app.config文件。这个解决方案需要独立存在。但是,我用于创建DLL(包含业务对象)的基类期望在配置文件中查找连接字符串和其他信息,这就是为什么我需要在其时“切换”到我的DLL配置文件的原因。访问,然后切换回来,所以我不会搞乱调用DLL的exe应用程序。

5 个答案:

答案 0 :(得分:5)

.NET 2.0及更高版本的配置系统为您提供了功能 - 例如,您可以使用根据需要加载特定的配置文件。这是一项更多的工作 - 但它确实有效。

你必须做这样的事情:

// set up a exe configuration map - specify the file name of the DLL's config file
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "ConfigLibrary.config";

// now grab the configuration from the ConfigManager
Configuration cfg = ConfigurationManager
                   .OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

// now grab the section you're interested in from the opened config - 
// as a sample, I'm grabbing the <appSettings> section
AppSettingsSection section = (cfg.GetSection("appSettings") as AppSettingsSection);

// check for null to be safe, and then get settings from the section
if(section != null)
{
   string value = section.Settings["Test"].Value;
}

您还需要确保正在构建类库DLL的配置并将其复制到可以获取它的位置。最糟糕的情况是,您需要指定一个特定的配置文件,并确保通过在Visual Studio属性窗口中设置其“复制到输出目录”属性将其复制到输出目录。

您还应该查看Jon Rista关于CodeProject上.NET 2.0配置的三部分系列文章。

强烈推荐,写得很好,非常有帮助!

马克

答案 1 :(得分:1)

您无法使用内置的.Net配置系统来执行此操作。它被设计(应该是)配置应用程序进程,而不是单独的Dll。正确的方法是将dll的配置设置添加到app.config系统中,用于“使用”(引用)该dll的每个可执行应用程序。 (或在machine.config中)

  • 只需进行设置即可 所有使用他的dll的应用程序 可以通过放置它们来完成 在Machine.config中(在 C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG for .Net2.0

如果您不想这样做,那么您必须编写自己的代码来打开,读取和写入自定义Xml文件(或您选择使用的任何格式)来排除这些设置。

答案 2 :(得分:1)

通常,当您在应用程序级别进行设置时,需要在应用程序级别生成这些设置,然后通过库进行渗透。它为初始化添加了一些代码行以注入依赖项,但无论如何你基本上都是尝试这样做。

如果您尝试在库的每个部署中并排包含dll的配置文件,那么您将遇到更多问题而不是它的价值,并且它在语义上没有多大意义。

以System.Data为例...当您创建连接时,您指定连接字符串,而不是仅为与System.Data库并排部署的连接字符串创建单独的配置文件。 [这会导致很多问题,因为它可能会存在于您的系统上的GAC中]

答案 3 :(得分:0)

最简单的答案是将值放在machine.config中。这样,使用dll的所有应用程序都可以通过.net应用程序配置类访问信息。通过这种方式,如果您绝对需要覆盖某个应用程序的值,则可以在主应用程序的app.config文件中覆盖它。

答案 4 :(得分:0)

我知道这篇文章有点旧,但我想把2美分投入。虽然在可能的情况下,我同意应用程序应该提供设置,而不是dll。我发现了一种情况,而dll特定的配置似乎更令人满意。

我们使用Quartz.NET的调度/任务应用程序。我们开发了一个界面来创建和监视Quartz服务器上的作业。 Quartz.NET的一大优点是你创建你的“作业”程序并将它们编译成DLL,然后将它们放到Quartz.NET服务器文件夹中并通过反射等等,Quartz能够开始使用新的DLL没有任何额外的调整Quartz服务器...如果没有需要在配置文件中保存的信息。

使用Quartz服务器,如果您有任何特定的配置信息应该保存在配置文件中,您必须将它放在Quartz.NET配置文件中。我们创建了几个“作业”应用程序,每个应用程序都有自己的配置信息,所以现在我们的Quartz.NET配置文件中充斥着所有这些不相关的设置。拥有一个特定于DLL的配置文件将大大减少Quartz.NET服务器的混乱。我看到的唯一其他选项是将所有这些单独的设置添加到设置数据库表中,但为了整合和维护代码,出于我们的目的,最好使用单个配置文件。

把它扔出去思考。