我收到了一台新机器,并认为插入一些机器范围的重定向只适用于我的 FsCheck 测试,就像在我以前的机器上一样。
事实并非如此,我收到了 与旧机器上类似的错误,所以我知道这是 FsCheck 加载 F# 4.X 而我的测试绑定到其他一些版本 4.Y
启用 FusionLog 后,重新启动以激活该野兽,为所有绑定启用 fusionlog,重新启动。我在日志中找到了罪魁祸首:
装配管理器加载自:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 在可执行文件下运行 C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 11.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TESTWINDOW\vstest.executionengine.x86 。可执行程序
=== 预绑定状态信息 ===
日志:DisplayName =FSharp.Core,版本 = 4.0.0.0,文化 = 中性,
调用程序集:FsCheck.Xunit,Version=0.3.0.0,Culture=neutral,PublicKeyToken=null。
我对绑定不太熟悉,但是:
为什么 fscheck 在运行测试之前没有抱怨它找到正确的 dll 而不是在运行时崩溃。我有兴趣知道什么是处理此类问题的优雅方式
如果 fscheck 不兼容,为什么要尝试加载版本 4.0.0.0。再次尝试理解我必须缺少的东西,因为这听起来很明显。我想这不是支持 4.X VS 4.Y 的问题,而是更多的“跑步者”被绑定到 4.X 而 fscheck 被绑定到 4.Y(是吗?在这种情况下,什么会阻止'重用'第一个绑定?)
为什么我的机器范围的重定向被忽略了。我想它的优先级低于任何其他本地配置文件,但 dotnet 框架不应该在解决之前的某个阶段对其进行调查。
显然我添加了以下内容以vstest.executionengine.x86.exe.config
避免 4.0.0 绑定,但我仍然对我的无知和我们的“框架”的变幻莫测所引起的变迁感到困惑:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a"
culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.3.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>