无法为 WCF 客户端配置 WCF 客户端,并出现 basicHttpsBinding 错误



尝试设置调用 WCF 服务的单元测试。在NET4.6下运行 客户端使用basicHttpsBinding。

已经复制了system.serviceModel配置部分(其中包括将basicHttpsBinding标签到单元测试的app.config。

当我运行测试 (xUnit) 时,当客户端构造函数运行时出现以下错误。

Exception thrown: 'System.Configuration.ConfigurationErrorsException' in System.Configuration.dll
Additional information: Configuration binding extension 'system.serviceModel/bindings/basicHttpsBinding' could not be found. 
Verify that this binding extension is properly registered in system.serviceModel/extensions/bindingExtensions and that it is spelled correctly.

另一个答案建议添加以下内容(以确保至少 net4.5 在测试中执行。

<startup>
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>   
</startup>

有什么线索吗?

编辑:这仅在锐化器 10 测试Runer下失败。 如果我使用 CTRL-R、T 并针对 InBuild 运行器运行,它可以正常工作。

我已经在Resharper中尝试了一些选项,

  • 强制 CLR 为 4.5,
  • 禁用/启用卷影复制,以及
  • 自己运行应用域。

没有一个改变结果。

我没有看到任何明显的原因导致失败 - xunit插件(现在是ReSharper本身的一部分,从2016.1版本开始)确实适用于app.config文件。如果您可以记录问题,并理想情况下附加解决方案(您可以私下执行此操作,因此只有 JetBrains 员工可以看到,或者如果需要,我们可以进行 NDA),我可以为您看看。

我怀疑这与为什么我类似的 WCF 顺序测试在Microsoft工具下失败相似......运行单个测试有效,因为它直接从 \bin\调试...但是将多个单元作为顺序测试运行失败,因为要运行它Microsoft使用名为 QTAgentXXXXX.exe 的可执行沙箱。

要找出运行测试的可执行文件,只需尽早断点,然后转储 AppDomain.CurrentDomain.SetupInformation(特别注意 TargetFrameworkName 和 ApplicationName 属性),并转储对 System.Diagnostics.Process.GetCurrentProcess() 的调用。MainModule.FileVersionInfo 获取可执行路径。将此可执行文件加载到 ILSpy 中,您可以查看编译它所依据的框架。

QTAgent应用程序Microsoft在C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\下,并且似乎存在几种变体,具体取决于所使用的.Net Framework或他们用来选择一个的任何奇怪的检测方案。不幸的是,我观察到最新的QTAgent32_40.exe是在旧的 4.0 框架下编译的,在您询问之前,是的,有一个 QTAgent32_40.exe.config,不,使用 sku=4.6 添加 supportedRuntime 设置并不鼓励它以任何不同的方式操作(也许你会看到不同的结果调整你的 resharper 10 Test Runer 配置)。 我已经尝试了程序集绑定应用在几个线程中提到的属性技巧也无济于事。我尝试使用 ILSpy 针对 4.6.2 重新编译我自己的 QTAgent 版本,但引用的许多 Microsoft.VisualStudio.blah.blah 程序集都有很多您无法构建的内部类。这些程序集具有一个名为 InternalsVisibleTo 的蹩脚程序集属性,该属性列出了允许访问这些内部类的外部库和可执行文件。 QTAgent 可执行文件属于这些属性,这就是为什么它们可以从这些程序集中使用它们的原因。 因此,这将是一个非常漫长而深的兔子洞,看看是否可以从根本上反编译所有这些相关的程序集并重新编译单元测试框架。 对于如此小的收益,这是大量的研究。 我说螺丝Microsoft的单元测试框架。 它也充满了其他问题。 我的同事一直建议使用 NUnit。 我想我可以试一试。

最新更新