Я получаю непредвиденное RuntimeBinderInternalCompilerException при передаче объекта в качестве динамического аргумента.
Я попытаюсь объяснить сценарий, так как он слишком вовлечен, чтобы легко вставить код. Я делаю очень странный хакер с Roslyn, так что это будет звучать странно.
- Выполнить приложение
- Исходный код монитора для изменений
- Перекомпилируйте то, что эффективно представляет собой сборка с измененными файлами/классами
- Загрузите новую скомпилированную сборку в исходный AppDomain
- Передача существующих экземпляров объектов в новый/измененный код как Динамический, поэтому новый код может работать в существующем состоянии контекста/приложения.
Эта динамическая передача должна работать, потому что тип совместим: например, в моем случае я могу гарантировать, что он имеет функционально соответствующие методы/типы.
Но когда я иду, чтобы выполнить измененный + перезагруженный метод, и он получает объект типа dynamic, я получаю это исключение.
RuntimeBinderInternalCompilerException was unhandled.
An unexpected exception occurred while binding a dynamic operation
В MSDN:
Исключения такого рода отличаются от RuntimeBinderException в том, что RuntimeBinderException представляет собой неспособность связываться в смысле обычная ошибка компилятора, тогда как RuntimeBinderInternalCompilerException представляет собой неисправность самого связующего времени выполнения.
Google не имеет абсолютно никаких результатов для этого. Я не знаю, как отлаживать его дальше. Любые предложения?
(Я выполнил некоторые тесты на песочнице, чтобы убедиться, что я могу загружать разные сборки во время выполнения в тестовое приложение и передавать типы экземпляров из разных сборок в один метод, принимающий динамический параметр, поэтому он работает в этом сценарии.)