С применением динамических данных и среды DLR сложные задачи программирования на C# могут быть радикально упрощены, особенно действие по включению библиотек СОМ в состав приложений .NET Core. Было показано, что это предлагает несколько дальнейших упрощений взаимодействия с СОМ (которые не имеют отношения к динамическим данным), в том числе встраивание данных взаимодействия СОМ в разрабатываемые приложения, необязательные и именованные аргументы.
Хотя все рассмотренные средства определенно могут упростить код, всегда помните о том, что динамические данные существенно снижают безопасность к типам в коде C# и открывают возможности для возникновения ошибок времени выполнения. Тщательно взвешивайте все "за" и "против" использования динамических данных в своих проектах C# и надлежащим образом тестируйте их!
Глава 19
Язык CIL и роль динамических сборок
При построении полномасштабного приложения .NET Core вы почти наверняка будете использовать C# (или другой управляемый язык, такой как Visual Basic) из-за присущей ему продуктивности и простоты применения. Однако в начале книги было показано, что роль управляемого компилятора заключается в трансляции файлов кода *.cs
ilasm.ехе).В текущей главе будет предложен краткий экскурс по родному языку платформы .NET Core. Здесь вы узнаете о различиях между
System.Reflection.Emit и объясняется, как можно динамически конструировать сборки (с помощью инструкций CIL) во время выполнения.Конечно, необходимость работать с низкоуровневым кодом CIL на повседневной основе будет возникать только у очень немногих программистов. Плава начинается с описания причин, по которым изучение синтаксиса и семантики такого языка .NET Core может оказаться полезным.
Причины для изучения грамматики языка CIL
Язык CIL является истинным родным языком платформы .NET Core. При построении сборки .NET с помощью выбранного управляемого языка (С#, VB, F# и т.д.) соответствующий компилятор транслирует исходный код в инструкции CIL. Подобно любому языку программирования CIL предлагает многочисленные лексемы, связанные со структурированием и реализацией. Поскольку CIL представляет собой просто еще один язык программирования .NET Core, не должен вызывать удивление тот факт, что сборки .NET Core можно создавать прямо на CIL и компилировать их посредством компилятора CIL (ilasm.exe
На заметку!
Как было указано в главе 1, ниildasm.exe, ни ilasm.exe не поставляется вместе с исполняющей средой .NET 5. Получить эти инструменты можно двумя способами. Первый способ — скомпилировать .NET 5 Runtime из исходного кода, находящегося по ссылке https://github.com/dotnet/runtime. Второй и более простой способ загрузить желаемую версию из www.nuget.org. Инструмент ildasm.exe в хранилище NuGet доступен по ссылке https://www.nuget.org/packages/Microsoft.NETCore.ILDAsm/, а ilasm.exe — по ссылке https://www.nuget.org/packages/Microsoft.NETCore.lLAsm/. Убедитесь в том, что выбрали корректную версию (для данной книги необходима версия 5.0.0 или выше). Добавьте NuGet-пакеты ILDasm и lLAsm в свой проект с помощью следующих команд:dotnet add package Microsoft.NETCore.ILDAsm --version 5.0.0
dotnet add package Microsoft.NETCore.ILAsm --version 5.0.0
Команды на самом деле не добавляют ildasm.exe
ilasm.exe в ваш проект, а помещают их в папку пакетов (в среде Windows):%userprofile%\.nuget\packages\microsoft.netcore.ilasm\5.0.0\runtimes\native\
%userprofile%\.nuget\packages\microsoft.netcore.ildasm\5.0.0\runtimes\native\
Кроме того, оба инструмента версии 5.0.0 включены в папку Chapter_19