问题 用于dll的App.config


我们有一个动态加载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"]);

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


2078
2017-09-30 20:19


起源

我想你应该参考我的视频来获得一些想法 youtube.com/watch?v=juBDM3fb-i0 - Nisarg Shah


答案:


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


7
2017-09-30 20:38



谢谢。这解决了它。 - daharon


有趣,我在那里我们正在做一些非常相似的事情,配置文件加载得很好。在我们的例子中,我认为每个新配置文件的名称都与其关联的程序集相匹配。所以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
2017-09-30 20:29





我为类似的系统写了这个。我的回忆是我用过的 Assembly.GetExecutingAssembly 获取附加的DLL文件路径 .config 到那个名字,加载它作为 XmlDocument,导航到 <appSettings> 节点并将其传递给 NameValueSectionHandlerCreate 方法。


1
2017-09-30 23:11





这是一种方式 - AppDomain.CurrentDomain.SetData(“APP_CONFIG_FILE”,“配置文件的路径”);

在构造函数中调用。


1
2018-06-02 12:32





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


0
2017-09-30 20:34



谢谢。这似乎是我的问题。我改变了一切,它现在有效。 - daharon


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


0
2017-09-30 20:42