将对象作为动态参数传递时,出现意外的 RuntimeBinderInternalCompilerException。
我将尝试解释该场景,因为它太复杂而无法轻松粘贴代码。我正在和 Roslyn 做一些非常奇怪的黑客行为,所以听起来很奇怪。
- 执行申请
- 监控源代码的变化
- 使用更改的文件/类重新编译实际上是程序集的差异
- 将新编译的程序集加载到原始 AppDomain
- 将现有对象实例作为动态传递给新的/更改的代码,因此新代码可以在现有的上下文/应用程序状态上运行。
这种动态传递应该可以工作,因为类型是兼容的:即,在我的情况下,我可以保证它具有功能匹配的方法/类型。
但是当我去执行 changed+reloaded 方法时,它接收到一个动态类型的对象,我得到了这个异常。
RuntimeBinderInternalCompilerException was unhandled.
An unexpected exception occurred while binding a dynamic operation
根据 MSDN:
此类异常与 RuntimeBinderException 的不同之处在于,RuntimeBinderException 代表通常编译器错误意义上的绑定失败,而 RuntimeBinderInternalCompilerException 代表运行时绑定器本身的故障。
谷歌对此绝对没有结果。我也不知道如何进一步调试它。有什么建议么?
(我确实做了一些沙盒测试,以确保我可以在运行时将不同的程序集加载到测试应用程序中,并将来自不同程序集的实例类型传递给接受动态参数的单个方法。所以它在那种情况下确实有效。)