将设置移动到另一个配置文件
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 说的与答案完全相反。 所以答案是,不幸的是,这是不可能的。
【讨论】:
以上是关于将设置移动到另一个配置文件的主要内容,如果未能解决你的问题,请参考以下文章