configSource 在 system.serviceModel *或*它的小节中不起作用
Posted
技术标签:
【中文标题】configSource 在 system.serviceModel *或*它的小节中不起作用【英文标题】:configSource doesn't work in system.serviceModel *or* its subsections 【发布时间】:2010-10-25 21:15:55 【问题描述】:我正在尝试将 app.config 文件拆分为多个文件,以便更轻松地管理不同环境所需的差异。有些部分很容易......
<system.diagnostics>
various stuff
</system.diagnostics>
成为
<system.diagnostics configSource="ConfigFiles\system.diagnostics.dev" />
将“各种东西”移到 system.diagnostics.dev 文件中。
但对于system.serviceModel
部分,这似乎不起作用。
现在我已经阅读了建议,它不适用于 system.serviceModel
本身,但它适用于它下面的部分:bindings
、client
、diagnostics
等。但同样的事情发生在当我尝试将 configSource 与其中之一一起使用时。当我放入时
<system.serviceModel>
<bindings configSource="ConfigFiles\whateverFile.dev" />
我明白了:
'configSource' 属性未声明。
还有其他人看过吗?你知道解决办法吗? (也许我有一个过时的架构或什么的?)
【问题讨论】:
在这里工作 - 我们每天都在生产中使用它。它在 Visual Studio 编辑器中不显示和支持 - 但它在运行时工作! 问题 1:您是否尝试过使用 *.config 扩展名命名您的外部化文件?问题 2:你能告诉我们其中一个外部配置文件吗? 【参考方案1】:VS.NET 的编辑器抱怨配置,但它有效。
我有这样的配置...
<system.serviceModel>
<behaviors configSource="config\system.servicemodel.behaviors.config" />
<bindings configSource="config\system.servicemodel.bindings.config" />
<client configSource="config\system.servicemodel.client.config" />
</system.serviceModel>
...效果很好。
【讨论】:
是的,你是对的。我现在看到它在编辑配置时会抱怨,但是当你运行应用程序时,它确实可以工作。 啊,我明白了——毕竟它确实有效。讨厌说:我是这么说的:-) 我一直在玩这个,发现 configSource 可以在<client>
元素上工作,但不能在单个 <endpoint>
元素上工作。
扩展和服务也可以工作:它将不在 <system.serviceModel>
上工作,因为那是配置 SectionGroup - 而不是配置 Section。
它将在运行时在<system.serviceModel>
以下的任何东西上都可以正常工作 - 我们一直都在这样做。马丁的回答很好地说明了这一点 - 他的样本会起作用。
【讨论】:
如果它可以在将配置部分移动到单独的文件时需要注意的一件事:确保分离的配置文件不包含 configSource 属性。例如,如果您像这样拆分绑定部分,
<system.serviceModel>
<bindings configSource="yourConfigFile.config" />
</system.serviceModel>
确保您的实际绑定文件不包含“configSource”属性:
<?xml version="1.0" encoding="utf-8"?>
<bindings>
<!-- binding configuration stuff -->
</bindings>
我知道这看起来很明显,但是如果你输入 configSource 属性,然后剪切并粘贴到一个新文件中,很容易忘记取出该属性。
希望这会有所帮助。
【讨论】:
以上是关于configSource 在 system.serviceModel *或*它的小节中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET web.config:configSource 与文件属性
如何在 .NET 中为自定义配置部分启用 configSource 属性?