【问题标题】:Is it possible to access the app.config file when an exe is used as a dll?将exe用作dll时是否可以访问app.config文件?
【发布时间】:2011-12-10 06:12:03
【问题描述】:

我有一个命令行应用程序,它使用通常的Properties.Settings.blabla 属性从 app.config 文件中读取一些设置。

此应用程序也用作 dll。

当我将它用作 dll 时,它会忽略我放在目录中的任何 foo.exe.config。当使用访问配置文件的方法时,它并没有像我预期的那样抛出异常,但它也没有获取配置文件。

有没有办法让用作 dll 的 exe 使用自己的设置文件,并且在使用 exe 时仍然使用 app.config 文件?我不想更改消费者代码,我希望对 exe 代码的影响尽可能小。

我见过使用ConfigurationManager.OpenMappedExeConfiguration 方法或OpenExeConfiguration 的解决方案,是否在exe 代码中使用这些方法的解决方案?这样它总是会寻找配置文件,不管它是用作 dll 还是 exe?

【问题讨论】:

    标签: c# .net app-config appsettings


    【解决方案1】:

    如果您想这样做,您需要专门从该文件中读取。 .NET 可执行文件从它自己的app.config 文件中读取。库代码总是app.config 文件中读取正在执行的应用程序...甚至是恰好被编译成具有 .exe 扩展名的文件的库代码。

    编辑强调/澄清 当我谈到 app.config 时,我当然是指经过适当重命名的 [program.exe.config] 文件。

    【讨论】:

    • 我目前使用 .dll 来调用例如配置文件的名称是 jobs.config 但我们创建了一个继承自 System.Configuration.ConfigurationSettings 等内容的 WorkerAgent 类,您尝试过查看吗在运行时与您的 .dll / 控制台应用程序名称同名的 .config 文件不查看 app.config
    • 那么,让我们用一个例子让事情更清楚。假设我有一个名为 myapp 的应用程序和一个名为 mylib 的库。 mylib 是一个 exe(实际上可以自己执行),但被 myapp 引用。 mylib 使用通常的 Properties.Settings.blabla 从配置文件中读取。如果在执行 myapp 期间,调用了 mylib 中的一个使用 Properties.Settings.blabla 的方法,那么该从哪里读取? myapp.exe.config 或 mylib.exe.config??根据您的回答,我假设它会从 myapp.exe.config 读取,对吗?如果那里不存在该设置怎么办?
    • @Juancentro 您的假设是正确的;因为在这种情况下,myapp.exe 是当前正在执行的程序,配置将从myapp.exe.config 中读取。因此,如果缺少相应的设置配置,我不知道会发生什么;我希望出现与缺少配置相关的异常,或者加载默认值(零或null,无论如何这可能会导致异常)
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 2013-02-13
    • 2011-05-29
    • 2019-02-09
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多