我们有通过反射的方式动态地加载动态链接库(无论是位于某个目录),并调用工作流类,从他们的“发动机”。
我们现在有需要访问数据库的一些新的工作流程,所以我想我会放在一个配置文件中的DLL目录。
但由于某些原因,我的工作流程就是不看配置文件。
<configuration>
<appSettings>
<add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" />
</appSettings>
</configuration>
鉴于上面的配置文件,下面的代码打印一个空字符串:
Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]);
我想我要的是只指定一个配置文件名,但我在这里遇到的问题。 我只是没有得到结果。 任何人有任何指针?
如果阅读的AppSettings你的代码示例是在你的DLL,然后它会尝试读取应用程序的配置文件,而不是DLL的配置文件。 这是因为你使用反射来执行代码。
好笑的是,我在哪里,我们正在做的非常相似,配置文件加载就好一些。 在我们的情况下,我认为每一个新的配置文件名匹配的它的相关组件。 所以MyLibrary.dll将有一个名为MyLibrary.dll.config与该文件汇编信息文件。 另外,我有得心应手的例子是使用VB.Net,而不是C#(我们有一些各自的),所有的设置中也有对特定VB-My.Settings命名空间,所以我们不直接使用ConfigurationManager中类阅读。
自己看起来像这样的设置:
<applicationSettings>
<MyLibrary.My.MySettings>
<setting name="SomeSetting" serializeAs="String">
<value>12345</value>
</setting>
</MyLibrary.My.MySettings>
</applicationSettings>
我写这一个类似的系统。 我的记忆是,我使用Assembly.GetExecutingAssembly
获得到DLL的文件路径,附加.config
到该名称,加载它作为一个XmlDocument
,导航到<appSettings>
节点,并通过其到一个NameValueSectionHandler
的Create
方法。
这里有一种方法 - AppDomain.CurrentDomain.SetData(“APP_CONFIG_FILE”,“路径配置文件”);
调用构造函数。
如果我没有记错,在app.config将您的应用程序目录加载,所以如果你是从其他目录加载DLL,你会希望他们在您的应用程序的配置文件所需要的密钥。
我不能完全肯定,但我认为,类只与AppDomain中默认(exe文件的大部分时间的路径)的输入方法的道路工程。 你需要调用OpenExeConfiguration(字符串exePath)(Framework 2.0和更高版本)首先指向一个不同的配置文件。