Как я могу просмотреть MSIL / CIL, сгенерированный компилятором C #? Почему это называется сборка? - PullRequest
117 голосов
/ 24 июля 2010

Я новичок в программировании на .NET C #. Я слежу за несколькими книгами. Говорят, что вместо того, чтобы компилировать его непосредственно в двоичный код (нативный код). Код высокого уровня преобразуется в промежуточный язык (называемый MSIL или CIL). Но когда я компилирую, я получаю файл exe / Dll.

  1. Содержится ли этот MSIL / CIL в этих файлах exe / dll?
  2. Я хочу увидеть этот промежуточный код языка. Просто чтобы почувствовать его существование. Как посмотреть?
  3. Они называют этот exe / dll файл assembly. Используют ли они это «причудливое слово» просто для того, чтобы отличать их от файлов exe / dll, содержащих двоичный код (нативный код)?

Ответы [ 13 ]

2 голосов
/ 10 апреля 2015

Если вы хотите просмотреть промежуточный язык, попробуйте загрузить JustDecompile от Telerik (которая в настоящее время бесплатна, хотя требует регистрации).

Перетащите в свою DLL и выберите IL из выпадающего списка вверху!

2 голосов
/ 25 июля 2010

По моему опыту, лучшим источником знаний о IL является Эндрю Троелсен «Pro C # и .NET Platform».Начиная с 3-го издания у него есть действительно выдающаяся глава (около 50 страниц) о том, как понимать IL и даже писать свой собственный код и использовать ILAsm.Я использовал эту информацию, чтобы выяснить, существует ли множественное наследование в мире .NET.Также вы можете попробовать использовать некоторые очень интересные функции в IL (например, фильтрация исключений, которая существует только в VB, но не в C #).

Я настоятельно рекомендую прочитать эту главу.

В конце концов .NET Reflector - это корпоративный стандарт для исследования кода сборки IL, и книга Рихтера, безусловно, "должна читать".Но из других упомянутых выше книг вы можете обнаружить действительно полезные вещи:)

Да, каждая сборка в мире .NET содержит некоторый IL-код (вместе с манифестом), который можно просматривать через Reflector или ILDasm.Более того, Reflector может показать вам оптимизированный код на C # и VB.Это означает, что любой человек может просмотреть исходный код сборки, и поэтому в коммерческих продуктах используются обфускаторы.

0 голосов
/ 25 января 2017

Теперь есть еще один вариант. Вы можете сделать это в VS Code с этим расширением , созданным с помощью Roslyn. Это в настоящее время ограничено .NET Core .

...