【问题标题】:App.config for dlldll 的 App.config
【发布时间】:2010-09-14 08:47:57
【问题描述】:

我们有一个“引擎”,可以动态加载 dll(无论位于某个目录中的什么),并通过反射从它们中调用 Workflow 类。

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

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

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

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

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

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

【问题讨论】:

标签: c# dll app-config


【解决方案1】:

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

在构造函数中调用。

【讨论】:

    【解决方案2】:

    我为一个类似的系统写了这个。我记得我使用Assembly.GetExecutingAssembly 来获取DLL 的文件路径,将.config 附加到该名称,将其加载为XmlDocument,导航到&lt;appSettings&gt; 节点并将其传递给NameValueSectionHandler' s Create 方法。

    【讨论】:

      【解决方案3】:

      有趣的是,我们正在做一些非常相似的事情,并且配置文件加载得很好。在我们的例子中,我认为每个新配置文件的名称都与其关联程序集的名称相匹配。因此 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>
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果您用于读取 AppSettings 的代码示例在您的 DLL 中,那么它将尝试读取应用程序的配置文件,而不是 DLL 的配置文件。这是因为您使用反射来执行代码。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 谢谢。这似乎是我的问题。我改变了一些东西,现在它可以工作了。
            猜你喜欢
            • 2012-02-18
            • 2011-07-08
            • 2011-04-08
            • 2017-09-18
            • 1970-01-01
            • 2018-12-27
            • 1970-01-01
            • 2015-09-16
            • 2013-11-02
            相关资源
            最近更新 更多