c# - 使用 MEF 时,为我的插件使用 app.config 的正确方法是什么?

标签 c# configuration app-config mef

所以我的主机程序将使用 MEF DirectoryCatalogue

加载到我的插件中

所以目前我有:

Host.exePlugin1.dll

Plugin1.dll 在其自己的配置中设置了一个配置设置(Plugin1.dll.Config):

<applicationSettings>
        <Plugin1.Settings>
            <setting name="MyString" serializeAs="String">
                <value>Hello</value>
            </setting>
        </Plugin1.Settings>
</applicationSettings>

在 Plugin1 中使用以下方式访问:

var myString = Settings.Default.MyString;

现在的问题是,这是一个 .dll 配置,因此更改它没有效果,因此在这种情况下,它实际上是硬编码和冗余的。

在网上阅读我发现:

You get one app.config file per executable (EXE, not DLL). The executable launches, creates its AppDomain, and then loads MyApp.exe.config.

但是通过将配置添加到我的 Host.exe 中,这意味着每当我添加新插件时,我都必须使用新配置而不是 将 Host.exe 重新分发给我的客户端Host.exe 只是动态加载它找到的任何插件。

处理这种情况的正确方法是什么?

最佳答案

首先,让我们区分设置配置
乍一看,设置和配置非常相似,但它们是不同用途的不同概念。

为了简单起见,您可以将配置视为最终用户的只读数据。用户不得(通常不能)更改配置,除非具有管理权限。例如,配置需要运行时版本、程序集加载的探测路径等。通常,用户无需进行任何更改。

另一方面,设置是用户可以更改的数据,以便更方便地使用应用程序。用户界面语言、启动时打开或不打开某些窗口、连接字符串(如果应用程序可以从不同的数据源检索数据) - 所有这些都是用户设置。

当然,有时很难在这些概念之间定义清晰的界限。尽管如此,内置配置/设置机制假设每个可执行文件都有一个配置文件,但您可以为每个插件定义自定义设置

因此,如果插件需要一些配置,那么是的,您必须将此配置添加到配置文件中(例如,通过创建新的配置部分),并重新分发更改的配置文件(您不需要在这种情况下不需要重新分发可执行文件)。

但是,如果插件需要一些设置(applicationSettings提出了一个想法,这就是你的情况),那么定义自定义设置类型就足够了(例如,添加插件项目中的设置)。然后,在运行时,您只需保存更改设置 - 框架将完成剩下的工作:它将找到设置文件,并更新它。在这种情况下,您不需要更新和重新分发配置文件。

注意,设置文件和配置文件是不同的文件;设置文件位于用户可以更改它的位置(%UserProfile%\AppData*)。

关于c# - 使用 MEF 时,为我的插件使用 app.config 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661488/

相关文章:

c# - RichTextBox 使用私有(private)字体时的不正确行为

Google Compute Engine 上的 Neo4j websocket 连接超时

node.js - 我可以链接 npm 配置条目吗?

asp.net-core - 组件空间 SAML

c# - TSQL - 选择插入的行

c# - 使用正则表达式从字符串中提取 json 数据

c# - 为什么我有时有一个 app.config 而有时有一个 binaryname.dll.config 文件?

.net - 样式指南/布局 web.config 和 app.config 以获得持续支持的最佳方式

c# - 配置。保存在网络驱动器上

c# - 是否可以从 Linq2Entities 查询返回结构?