Чтобы динамический код мог вызывать методы для статического кода, вы должны предоставить необходимую ссылку при компиляции динамического кода.
Более подробно:
Скажем, у вас есть класс с именем MyClass
, к которому вы хотите получить доступ из динамического кода.
Поместите класс MyClass
в отдельную сборку, назовем его MyAssembly
. Когда вы компилируете динамический код, одно из свойств ICodeCompiler
позволяет вам предоставлять сборки в качестве ссылок. Таким образом, вы должны предоставить typeof(MyClass).Assembly
через это свойство.
Теперь, когда вы скомпилируете код, он сможет делать такие вещи, как:
MyClass.CallSomeMethod();
Пространства имен здесь не проблема. Вы можете убедиться, что динамический код использует полное имя типа (например, MyNameSpace.MyClass
, или вы можете сгенерировать using MyNamespace;
в начале динамического кода.
Наконец, я присоединяюсь к рекомендации Ричарда определить четкий интерфейс, который динамический код сможет использовать. Вам просто нужно предоставить сборку, содержащую этот интерфейс, в качестве ссылки при компиляции.