Я новичок в программировании на .NET C #. Я слежу за несколькими книгами. Говорят, что вместо того, чтобы компилировать его напрямую в двоичный код (собственный код). Код высокого уровня преобразуется в промежуточный язык (называемый MSIL или CIL). Но при компиляции получаю exe / Dll файл.
- Содержится ли этот MSIL / CIL в этом exe / dll-файле?
- Я хочу увидеть этот код промежуточного языка. Просто чтобы почувствовать его существование. Как это посмотреть?
- Они называют этот файл exe / dll файлом
assembly
. Они используют это «причудливое слово» только для того, чтобы отличить их от файлов exe / dll, содержащих двоичный код (собственный код)?
c#
.net
assemblies
starblue
источник
источник
Ответы:
.text
разделе PE файла (переносимый исполняемый файл = * .exe или * .dll). Более подробную информацию можно найти здесь .Если я могу также порекомендовать хорошую книгу по этому поводу, то это Expert .NET 2.0 IL Assembler от Сержа Лидина. Он парень, который разработал MSIL.
источник
.text
секстион? Если нет, что там.text
содержится? и как дела,#
я думал, что разделы названы, начиная с.
. Так не может быть.strings
Один из моих любимых способов увидеть IL для фрагмента C # - использовать бесплатный инструмент LINQPad . После ввода некоторого кода и выбора «Операторы C #» вверху (или «Программа C #», в зависимости от того, что подходит), нажмите кнопку «IL» под областью ввода кода, и вы увидите сгенерированный IL.
Использование LINQPad для этого намного удобнее, чем загрузка Visual Studio или запуск компилятора из командной строки, затем загрузка ILDASM и открытие файла .il в текстовом редакторе.
источник
Если вам нужен онлайн, .NET Fiddle отлично подойдет . Просто вставьте свой код и нажмите кнопку
View IL
вверху справа.источник
Другой вариант: использовать ReSharper
Синхронизированный вид источника / IL: левая синяя фоновая линия соответствует правому блоку IL
В Visual Studio:
Поддерживает синхронизированное представление исходного кода и IL - когда вы щелкаете инструкцию в источнике, соответствующий блок в IL выделяется (и наоборот). Отображает описания IL из Microsoft Developer Network и «Набор инструкций Common Intermediate Language (CIL)» из стандартной спецификации ECMA.
см. Просмотр промежуточного языка (IL) в справке Resharper. Изображение выше взято из справки Resharper.
Бесплатный вариант - использовать Jetbrains dotPeek
см. также: «Изучение промежуточного языка (IL) с помощью ReSharper и dotPeek», Маартен Баллиау, 19 января 2017 г. - блог Jetbrains
источник
PS Поскольку вы читаете некоторые книги, я настоятельно рекомендую вам CLR через C # .
источник
Я считаю, что они называются «сборками», потому что сборка - это набор модулей, собранных вместе с помощью манифеста.
(источник: microsoft.com )
Подробности см. В разделе « Содержимое сборки» .
источник
Sharplab - это онлайн-инструмент, отлично подходящий для простых случаев использования. Введите свой код слева, IL появится справа.
источник
Во многих отношениях сборки .NET похожи на пакеты байт-кода Java.
источник
Я только что потратил пару часов на поиск лучшего инструмента, который позволил бы мне просматривать код IL прямо внутри Visual Studio.
Единственное решение, которое я нашел до сих пор, - Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
работает неплохо!
В остальном второе лучшее решение, но без интеграции с визуальной студией, - это JetBrains dotPeek, что, честно говоря, довольно круто.
источник
Я знаю, что это старый вопрос, и я бы предпочел любой из перечисленных выше инструментов. Однако, в крайнем случае, программа просмотра MSIL была в комплекте с Visual Studio, по крайней мере, с версии 2005.
Инструмент назван
ildasm.exe
и находится в следующих папках после установки Visual Studio по умолчанию:Visual Studio 2005 "
C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"
Visual Studio 2008 "
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe
"Visual Studio 2010 "
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe
"Дополнительные сведения см. В разделе « Как просмотреть содержимое сборки » в библиотеке MSDN.
источник
По моему опыту, лучший источник знаний, связанных с IL, - это Andrew Troelsen «Pro C # and .NET Platform». Начиная с 3-го издания, у него действительно, действительно выдающаяся глава (около 50 страниц) о том, как понимать IL и даже писать свой собственный код и использовать ILAsm. Я использовал эту информацию, чтобы выяснить, существует ли множественное наследование в мире .NET. Также вы можете попробовать использовать некоторые очень интересные функции в IL (например, фильтрацию исключений, которая существует только в VB, но не в C #).
Я очень рекомендую прочитать эту главу.
В конце концов, .NET Reflector стал корпоративным стандартом для исследования кода сборок на языке IL, и книга Рихтера определенно "должна быть прочитана". Но из других книг, подобных упомянутым выше, вы могли бы обнаружить действительно полезные вещи :)
Да, каждая сборка в мире .NET содержит некоторый код IL (вместе с манифестом), который можно просмотреть через Reflector или ILDasm. Более того, Reflector может показать вам код, оптимизированный для C # и VB. Это означает, что любой человек может просмотреть исходный код сборки, поэтому в коммерческих продуктах используются обфускаторы.
источник
Если вы хотите просмотреть промежуточный язык, попробуйте загрузить JustDecompile с Telerik (который в настоящее время бесплатен, однако требует регистрации).
Перетащите свою DLL и выберите
IL
из раскрывающегося списка вверху!источник
Теперь есть другой вариант. Вы можете сделать это в VS Code с помощью этого расширения, созданного с помощью Roslyn. В настоящее время это ограничено .NET Core .
источник