App.config中的DLL(App.config for dll)

2019-08-17 17:30发布

我们有通过反射的方式动态地加载动态链接库(无论是位于某个目录),并调用工作流类,从他们的“发动机”。

我们现在有需要访问数据库的一些新的工作流程,所以我想我会放在一个配置文件中的DLL目录。

但由于某些原因,我的工作流程就是不看配置文件。

<configuration>
  <appSettings>
      <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" />
  </appSettings>
</configuration>

鉴于上面的配置文件,下面的代码打印一个空字符串:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]);

我想我要的是只指定一个配置文件名,但我在这里遇到的问题。 我只是没有得到结果。 任何人有任何指针?

Answer 1:

如果阅读的AppSettings你的代码示例是在你的DLL,然后它会尝试读取应用程序的配置文件,而不是DLL的配置文件。 这是因为你使用反射来执行代码。



Answer 2:

好笑的是,我在哪里,我们正在做的非常相似,配置文件加载就好一些。 在我们的情况下,我认为每一个新的配置文件名匹配的它的相关组件。 所以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>


Answer 3:

我写这一个类似的系统。 我的记忆是,我使用Assembly.GetExecutingAssembly获得到DLL的文件路径,附加.config到该名称,加载它作为一个XmlDocument ,导航到<appSettings>节点,并通过其到一个NameValueSectionHandlerCreate方法。



Answer 4:

这里有一种方法 - AppDomain.CurrentDomain.SetData(“APP_CONFIG_FILE”,“路径配置文件”);

调用构造函数。



Answer 5:

如果我没有记错,在app.config将您的应用程序目录加载,所以如果你是从其他目录加载DLL,你会希望他们在您的应用程序的配置文件所需要的密钥。



Answer 6:

我不能完全肯定,但我认为,类只与AppDomain中默认(exe文件的大部分时间的路径)的输入方法的道路工程。 你需要调用OpenExeConfiguration(字符串exePath)(Framework 2.0和更高版本)首先指向一个不同的配置文件。



文章来源: App.config for dll