Получить MSIL из сборки?

Можно ли извлечь MSIL из объекта Assembly без загрузки информации о типе?

У меня есть простое приложение, которое принимает строку и пытается динамически создать метод для очень быстрых вычислений, но я хочу избежать загрузки информации о сборке / типе с помощью CodeCompileUnit для компиляции строки кода C #, извлечения MSIL из скомпилированной сборки и отправка MSIL в DynamicMethod. Если это возможно.


person Toby Wilson    schedule 27.01.2011    source источник
comment
Мне не совсем понятно, чего вы хотите достичь, но мне кажется, вы ищете способ скомпилировать код C #, имея его в качестве динамически загружаемого метода (и для достижения этой копии компилятор сгенерировал MSIL) вместо вызов скомпилированной сборки?   -  person Johannes Rudolph    schedule 27.01.2011
comment
Я да. Вызов скомпилированной сборки вызывает утечку памяти, так как сборка не может быть выгружена; и мое приложение потенциально может иметь очень большое количество динамически загружаемых методов.   -  person Toby Wilson    schedule 31.01.2011


Ответы (3)


Взгляните на Mono.Cecil, который помогает вам читать / изменять / создавать сборки, не загружая их.

person Nekresh    schedule 27.01.2011

Единственный способ получить MSIL - вызвать метод MethodBase.GetMethodBody. Но сначала требуется загрузка типа.

person Andrey    schedule 27.01.2011

Используйте напрямую System.Reflection.Emit. Для динамических методов вам даже не нужен тип.

person SK-logic    schedule 27.01.2011