App.config for dll

本文关键字:dll for config App | 更新日期: 2023-09-27 17:47:22

我们有一个"引擎",可以动态加载dll(位于某个目录中的任何内容(,并通过反射的方式从中调用工作流类。

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

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

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

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

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

我想我想要的只是指定一个配置文件名,但我在这里遇到了问题。我只是没有得到结果。有人有什么线索吗?

App.config for dll

如果用于读取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>节点,并将其传递给NameValueSectionHandlerCreate方法。

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

调用构造函数。

如果我没有记错,app.config将从您的应用程序目录加载,因此,如果您从其他目录加载dll,您将在应用程序的配置文件中需要它们所需的密钥。

我不完全确定,但我认为该类默认情况下只适用于AppDomain的入口方法的路径(大多数时候是exe的路径(。您需要首先调用OpenExeConfiguration(字符串exePath((Framework 2.0及更高版本(来指向不同的配置文件。