【发布时间】:2017-10-05 22:01:20
【问题描述】:
我在这方面做了很多研究,尝试了很多方法,但我开始认为我想做的事情做不到。也就是说——我正在构建一个将被多个客户端使用的应用程序。每个客户端都有自己的数据库连接要求,以及用于控制应用程序某些行为的自定义设置。
我想做的是为每个单独的客户端创建一个 .config 文件,然后使用一个命令行参数来指定要加载的 .config 文件。每个配置文件都有自己的部分,以及自己的 .我浏览了很多关于 ConfigurationManager 和 Configuration 类的文档,并尝试了许多不同的方法,但都失败了。
基本问题是“当我打开一个 .config 文件时,我如何告诉应用程序将此 .config 设为默认配置?”例如,当我稍后引用 appSettings 中的值或数据库连接字符串时,如何确保这些引用将每个映射到我已加载的自定义配置,而不是 Visual Studio 默认创建的配置?
我找到了各种关于加载配置文件的引用,但没有任何内容告诉我如何用我刚刚加载的文件动态替换标准文件。我总是以空引用异常告终,并一头扎进砖墙。
【问题讨论】:
-
为什么要使用配置文件?为什么不将配置存储在数据库中?您不能将其锁定为程序集名称的 app.config 替换。但是您可以在启动时加载特定的配置文件,并通过单例等方式让整个应用程序访问该文件。
-
根据您拥有的项目/客户端数量,一种简单的方法是只使用一个配置,并在每个应用设置的键前面加上客户端 ID。然后访问带有前缀键字符串的应用设置项:
'CLIENT1-ConnectionString','CLIENT2-ConnectionString',等等... -
您不能告诉 .net 应用程序使用另一个 .config 文件。也许一个小型引导应用程序可以将 .config 文件复制到适当的位置,但您肯定会争取访问权。 refer to another file 的选项听起来没什么用。请考虑这不是您真正想要的功能。您的客户确实在您不知情的情况下自行修改此文件,可能在您停止关注很久之后。
-
将所有客户的连接字符串存储在一个配置文件中,所有客户都可以访问,这听起来是个坏主意。在构建应用程序时使用配置文件转换为特定客户生成 Web.config:stackoverflow.com/questions/34735132/…
标签: c# config app-config