MSDN.WhiteKnight - Stack Overflow answers
Ответ на ".NET Core сборка IL кода"
Answer 1031901
Есть масса кода написанного на IL, который требуется перевести на рельсы .NET Core, однако, при чтении документации выяснилось, что ilasm.exe там не предусмотрен.
Это так. Однако, в .NET Core, начиная с версии 2.0, поддерживается запуск сборок, скомпилированных под .NET Framework (естественно, они должны использовать только то, что есть в .NET Core, иначе будет ошибка во время выполнения). Так что эта проблема может быть и не очень критична.
Вроде есть что-то в NuGet, но тянуть оттуда возможности нет, так как компьютер, на котором планируется проводить сборку изолирован от интернета. Бегать же с флешкой что-то загружать тоже не айс.
Ну так если нельзя ни скачивать с интернета, ни приносить на флешке, как вообще вести разработку под .NET Core? Для этого нужен как минимум .NET Core SDK, который желательно иногда обновлять.
Но в виду того, что классы для генерации IL кода и последующего создания из него сборок есть в самой платформе, подумал набросать свой собственный небольшой компилятор. Однако к каким классам обратиться, инфы нигде не нашел.
Дополнение. Сборка IL для .NET Core возможна при использовании специального SDK Microsoft.NET.Sdk.IL. Ранее он использовался только внутренне в репозитории CoreCLR, но теперь его выложили в общую галерею NuGet. Чтобы его использовать, нужно добавить в каталог с проектом файл global.json подобного содержания (версию по необходимости поменять):
{ "msbuild-sdks": { "Microsoft.NET.Sdk.IL": "5.0.0" } }
Затем нужно создать файл .ilproj:
<Project Sdk="Microsoft.NET.Sdk.IL"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> </Project>
После этого можно добавлять в каталог файлы с расширением .il, они автоматически подхватятся для сборки. Сборка делается командой dotnet build (VS не поддерживается). Полный пример проекта можно посмотреть здесь: https://github.com/MSDN-WhiteKnight/CodeSamples/tree/master/IL
Источник: https://github.com/dotnet/runtime/issues/11411#issuecomment-436427961
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.