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

时间:2009-05-04 19:59:28

标签: asp.net configuration web-config settings

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

当我使用设计器为我的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生成的类访问了很多设置,在多个环境之间很难维护。如果我可以强制设置类使用appSettings而不是applicationSettings,那会更好。

有可能吗?

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:25)

Waaaay迟到了这个问题,但我刚刚在这个问题上撞到了墙上。事实证明,你可以这样做,只是不是为整个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>

答案 1 :(得分:2)

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

  

如果可以的话会更好   force要使用的Settings类   appSettings不是applicationSettings。

为了做到这一点,你需要远离在.NET中使用漂亮的可视化“设置”类并直接使用ConfigurationManager。这样,您就可以将设置放入&lt; appSettings&gt;并使用ConfigurationManager.AppSettings [“keyname”]读取它们。

马克

答案 2 :(得分:1)

如果是我的项目,我将摆脱applicationSettings并将所有内容移至appSettings部分。 applicationSettings的值是可以强类型化值并且可用于Intellisense。这些都不是特别有利于你的情况。当然,如果您仍在通过设计师创建设置,那么移动所有内容的重大打击是不值得的。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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