将设置移动到另一个配置文件

Posted

技术标签:

【中文标题】将设置移动到另一个配置文件【英文标题】:Moving Settings to another config file 【发布时间】:2010-10-23 17:34:16 【问题描述】:

是否可以像使用 connectionStrings 或 appSettings 一样将 applicationSettings 移动到另一个配置文件?

当我使用设计器为我的 Web 应用程序创建设置时,我会在 web.config 中获得 applicationSettings 部分,例如:

  <applicationSettings>
    <TestWebApplication.Properties.Settings>
      <setting name="AnotherSetting" serializeAs="String">
        <value>Another setting value</value>
      </setting>
    </TestWebApplication.Properties.Settings>
  </applicationSettings>

我希望能够将它们移动到另一个文件,例如 appSettings:

<appSettings configSource="config\appsettings.config"/>

我正在处理一个项目,该项目具有通过设计器生成的类访问的大量设置,而 web.config 很难在多个环境之间维护。如果我可以强制 Settings 类使用 appSettings 而不是 applicationSettings,那就更好了。

有可能吗?

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

这个问题迟到了,但我只是在这个问题上用头撞墙。事实证明您可以这样做,只是不能针对整个 applicationSettings 节点,您必须分别执行 applicationSettings 的每个子节点。我从MSDN SectionInformation.ConfigSource 文章底部得到了魔法信息。

app.config/web.config 内容

<applicationSettings>
    <TestWebApplication.Properties.Settings configSource="externalfile.config" />
</applicationSettings>

externalfile.config 内容:

<TestWebApplication.Properties.Settings>
    <setting name="AnotherSetting" serializeAs="String">
        <value>Another setting value</value>
    </setting>
</TestWebApplication.Properties.Settings>

【讨论】:

以防其他人后来通过此线程希望像我一样执行此操作。丹的解决方案也对我有用。感谢 Dan 花时间更新帖子!【参考方案2】:

是的,当然有可能!任何配置文件中的任何 ConfigurationSection 都可以通过 configSource="otherConfigFile.config" 属性“外部化”。

如果可以的话就更好了 强制设置类使用 appSettings 不是 applicationSettings。

为了做到这一点,您需要摆脱在 .NET 中使用漂亮的可视化“设置”类,而直接使用 ConfigurationManager。这样,您可以将设置放入 并使用 ConfigurationManager.AppSettings["keyname"] 读取它们。

马克

【讨论】:

configSource 不适用于 applicationSettings。当我尝试将它与 applicationSettings 一起使用时出现配置错误。 啊是的 - 这是一个特殊情况。您需要改用“file=filename.config”。 仍然不起作用,我从属性 [global::System.Configuration.DefaultSettingValueAttribute("Another setting value")] 获取默认值,而不是从指定文件中获取值 是的 - 文件中的值是默认值,但可以在本地覆盖。因此,如果您的外部文件和 app.config 的 appsettings 部分中的密钥相同,那么您的 app.config 将获胜。恐怕你对此无能为力。【参考方案3】:

如果这是我的项目,我会摆脱 applicationSettings 并将所有内容移至 appSettings 部分。 applicationSettings 的值是这些值可以是强类型的并且可供 Intellisense 使用。这些都不是对您的情况特别有利。当然,如果您仍在通过设计器创建设置,那么移动所有内容的巨大成功是不值得的。

【讨论】:

【参考方案4】:

嗯...我知道这是可能的,因为我知道我们在以前的工作中这样做过。不过,我不记得到底是怎么回事。我相信我们有一个父项目用来继承设置,并且有一个手动步骤,如果我们对子项目中的 applicationSettings 进行更改,我们需要手动将更改复制到父项目(但是然后它们被所有子项目继承)。

抱歉,缺乏特异性;我不是实施该解决方案的人,随着时间的推移,它对我来说有点模糊。不过,我确实记得我们能够做到这一点,而且我认为我的回忆对于我们是如何做到的是准确的。

【讨论】:

【参考方案5】:

这个问题很长一段时间没有被标记为答案。 好吧,在 marc_s 的回答下,有 cmets 解释说这是不可能的。我不想将 marc_s 答案标记为已接受的答案,因为 cmets 说的与答案完全相反。 所以答案是,不幸的是,这是不可能的。

【讨论】:

以上是关于将设置移动到另一个配置文件的主要内容,如果未能解决你的问题,请参考以下文章

能不能将一台电脑上的ubuntu系统通过移动硬盘,整体转移到另一台电脑上

将 dll 的配置文件移动到调用 dll 的应用程序

vmware虚拟机如何迁移

如何将lvm卷移动到另一台服务器中

如何将liunx客户机迁移到vmwae esxi

如何将 chrome 书签从单个桌面上的不同用户配置文件复制到另一个网络位置