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 本身,但它适用于它下面的部分:bindingsclientdiagnostics 等。但同样的事情发生在当我尝试将 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 可以在 &lt;client&gt; 元素上工作,但不能在单个 &lt;endpoint&gt; 元素上工作。 扩展和服务也可以工作: 迟到并意识到这一点,但我必须将每个配置文件的“复制到输出目录”设置为“始终复制”,才能使接受的解决方案正常工作。希望对您有所帮助。【参考方案2】:

它将&lt;system.serviceModel&gt; 上工作,因为那是配置 SectionGroup - 而不是配置 Section。

在运行时在&lt;system.serviceModel&gt; 以下的任何东西上都可以正常工作 - 我们一直都在这样做。马丁的回答很好地说明了这一点 - 他的样本会起作用。

【讨论】:

如果它可以在 下的任何东西上工作,那么为什么它不能在 下的任何东西上工作?我已经在十几个地方读到它“会”工作。但它没有。因此问题。 所以你真正想说的是,无论我喜欢与否,我都会收到错误消息,但我应该忽略它,它会自动工作? 不,我是说这里发生了一些奇怪的事情,因为“它可以在我的机器上运行”:-) 你使用的是什么版本的 .NET?【参考方案3】:

将配置部分移动到单独的文件时需要注意的一件事:确保分离的配置文件不包含 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 *或*它的小节中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

web.config中的configSource

ASP.NET web.config:configSource 与文件属性

如何在 .NET 中为自定义配置部分启用 configSource 属性?

configSource 在 system.serviceModel *或*它的小节中不起作用

无法打开作为链接添加的 configSource 文件

Web.Config 将单个 AppSettings 转换为 ConfigSource