我需要有一个.NET 3.5 DLL有它自己的配置文件。 此DLL可以从许多不同的应用程序被称为所以存储在所需要的配置文件中的信息(如连接字符串)存放在该DLL可以引用一个配置文件。 我要的是在使用DLL时,我需要“开关”用来参考信息是DLL的配置文件中的配置文件。 然后,当DLL与使用配置信息完成后,该开关是由回默认的。 该DLL是使用.NET 3.5编写。 我一直在寻找如何做到这一点,我不断寻找的是如何合并与一个exe的app.config文件的信息。 就我而言,我不知道该如何在那里这个DLL将用于修改任何EXE的文件的app.config那里。 该解决方案必须独立。 然而,用我的基类来创建DLL(包含业务对象)期待查找在配置文件中的连接字符串和其他信息,所以这就是为什么我要“开关”我的DLL的配置文件的时候,当它被访问,然后再切换回来,所以我不要弄乱的exe应用程序调用该DLL。
Answer 1:
在.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的属性窗口中设置其“复制到输出目录”属性复制到输出目录。
您也应该检查出乔恩Rista的三部系列在.NET 2.0配置了CodeProject上。
- 解开的.NET 2.0配置的奥秘
- 解码的.NET 2.0配置的奥秘
- 裂化的.NET 2.0配置的奥秘
强烈推荐,写得很好,非常有帮助!
渣
Answer 2:
一般来说,当你在应用程序级别的设置,您需要生成应用程序级别的设置,然后通过你的库渗透他们。 它增加了代码的几行到您的初始化注入依赖,但你基本上是尝试这样做,反正。
你要运行到超过其价值的方式更多的问题,如果你尝试包括刚才的dll并肩库的每一个部署配置文件,它只是不作出了很多的语义意义。
就拿System.Data例如...当你创建连接时,可指定连接字符串,而不是只是在连接字符串与System.Data库部署并排创建一个单独的配置文件。 [和,因为它可能驻留在GAC您的系统上会导致吨的问题反正]
Answer 3:
不能使用内置的.NET配置系统来做到这一点。 它的目的是(因为它应该是)来配置应用程序,而不是indvidual的DLL。 去这个问题的正确方法是为DLL添加的配置设置成在app.config系统为每个可执行的应用程序,“使用”(有参考)该DLL。 (或者在machine.config)
- 简单地使该USET他DLL可以通过将它们在Machine.config(在C来完成所有applictions访问的设置:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG为.Net2.0
如果你不想这样做的,那么你就必须编写自己的代码来打开,读取和写入FRM的自定义XML文件(或任何格式您选择使用),以extyract这些设置。
Answer 4:
最简单的答案,这将是把这些值在machine.config。 这样,使用DLL的所有应用程序将能够通过.NET应用程序的配置类来访问这些信息。 通过这种方式也一样,如果你绝对需要覆盖一定applicatin一个值,你可以在主应用程序的app.config文件覆盖它。
Answer 5:
我知道这个帖子是有点老了,但我希望把我的2美分,而在5月的情况下,我会同意的申请应提供的设置,而不是DLL。 我在当DLL特定CONFIGS似乎更desireable发现一个情况。
我们使用的计划/任务应用程序了Quartz.NET。 我们开发了一个界面来创建和监视对石英服务器作业。 其中一件关于Quartz.NET伟大的事情是,你创建你的“工作”程序并将其编译成DLL文件,然后只需拖放在Quartz.NET服务器文件夹,并通过反射和这样的,石英能够开始使用新的DLL没有任何额外的调整,以石英服务器......如果有需要在配置文件举行任何信息。
石英服务器,如果您有应保持在配置文件中的任何具体的配置信息,你必须把它放在Quartz.NET配置文件。 我们已经创造了几个“工作”应用程序,每一个都有自己的配置信息位,所以现在我们的Quartz.NET配置文件中充斥着所有这些不相关的设置。 有一个DLL特定的配置文件会大大降低Quartz.NET服务器的杂乱。 唯一的选择我看到的是,添加所有这些单独的设置成设置数据表,但对于巩固和维护代码,对我们而言,个人配置文件是优选的。
只是那个扔在那里思考的问题。