今天我偶然发现了这个问题,但是我找不到任何相关信息。所以我在这里提问。也许有人知道为什么。
我向我的web.config中添加了一个自定义的WCF行为扩展。它看起来像这样:
<behaviorExtensions>
<add name="errorBehavior" type="MyNs.TracingErrorBehaviorElement,MyNs,
Version=1.0.6.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
(这里没有空格:MyNs.TracingErrorBehaviorElement,MyNs
)
在我的开发机器、我们的暂存服务器和我们的生产服务器等等上,它都能完美运行。
今天我们在一个客户服务器上安装产品时出现了以下异常:
System.Configuration.ConfigurationErrorsException:创建用于system.serviceModel/behaviors的配置部分处理程序时出错:无法向此元素添加扩展元素“errorBehavior”。请确认扩展已在system.serviceModel/extensions/behaviorExtensions扩展集合中注册...
在花费半小时搜索可能原因后,我给完全限定的程序集名称添加了空格。所以我把它改成了:
<behaviorExtensions>
<add name="errorBehavior" type="MyNs.TracingErrorBehaviorElement, MyNs,
Version=1.0.6.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
(看空格:MyNs.TracingErrorBehaviorElement,MyNs
)
它有效了。
有人知道为什么一些机器上没有空格就能工作,而另一些机器不能吗?
我检查了.Net版本
。他们匹配。这可能是由于区域设置引起的吗?
编辑说:
我在所有机器上检查了使用的 .Net 版本,它们都相同:.Net 4.0 但我发现一个区别,即在我遇到缺少空格错误的机器和其他正常运行的机器之间存在差异: 所有没有空格可以正常工作的机器都安装了 .Net Framework 4.5。那么这可能是那些在 4.0 中修复并部署在 4.5 中的 bug 之一,对吧?