【问题标题】:Copy app settings from external file into app.config将应用程序设置从外部文件复制到 app.config
【发布时间】:2013-01-12 00:16:44
【问题描述】:

我正在尝试找出更新现有应用程序的 app.config 文件以包含新应用程序设置而不覆盖预先存在的设置值的最佳做法。

所以,从头开始,我有一个项目,它通过 Visual Studio 安装项目内置到 MSI 中,并且该 MSI 用于安装应用程序。此应用程序已安装在大约 1000 多个位置。现在,在应用程序的新版本中,我们有一个新的应用程序设置来定义 Web 服务端点。但是,安装项目不会使用新设置部署新的 app.config,因为安装项目就像那样愚蠢,并且它们只会在 app.config 尚不存在或现有的 app.config 存在的情况下安装匹配创建和修改日期,以避免覆盖用户定义的配置。

现在,由于我无法覆盖 app.config,我想也许我会将 app.config 更改部署为单独的 XML 文件,并且在应用程序启动时,我将加载这个单独的 XML 文件,复制所有设置出来,与实际的 app.config 文件中的内容进行比较,缺少的任何内容我都会保存到 app.config 文件中。

但我在从外部 XML 文件加载配置并将其复制到 app.config 时遇到问题。我该怎么做呢?还有其他更好的方法来管理更新 app.config 文件吗?最佳做法是什么?

我对 Java 比较熟悉,这对于属性文件来说是一件非常简单的事情,但对于 .NET 配置文件来说似乎并不那么简单。

【问题讨论】:

    标签: c# .net installation app-config


    【解决方案1】:

    据我所知,没有开箱即用的方法。

    我会将文件解析为 XDocument,然后检查 doc.Element("settingName") 是否为空。如果是,则该设置不存在,您可以添加默认值。如果节点确实存在,则用户已定义自定义设置。

    【讨论】:

    • 我有同样的想法,但你必须将其解析为 XML 而不是直接将两个文件作为配置对象加载并比较两者,以便移动新的,这似乎很愚蠢设置从新文件到预先存在的文件。我的意思是,.NET 知道如何加载 .config 文件——为什么它不让我们从我们想要的任何地方加载任意数量的文件,并以我们想要的任何方式操作它们,就像使用 Java 属性文件一样?
    • 我确实以这种方式实现了它,并且效果很好,但这有点让人头疼。说真的,在 Java 中很容易从你想要的任何地方打开 Properties 文件并将所有内容加载到 Properties 对象中,这样你就可以比较,并从一个到另一个复制到你心中的程度。在 .NET 中加载多个配置文件应该同样简单,而无需解析 XML。
    • 对我来说,这听起来像是一个开始开源包装库的好借口。 :)
    【解决方案2】:

    【讨论】:

    • 这不是我要求的。我不需要将两个配置文件链接在一起。我需要加载同一个配置文件的两个不同版本,比较它们中的设置,然后从旧版本复制到新版本。
    • 第一个链接断开
    猜你喜欢
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2021-10-12
    • 2021-05-06
    • 2014-06-12
    • 1970-01-01
    • 2016-02-29
    • 2011-12-23
    相关资源
    最近更新 更多