Генерация кода с помощью.Net Standard
У меня есть небольшая библиотека, которая сильно зависит от классов и методов Emitting.
Я хочу перенести его в.Net Standard, потому что он не использует никаких неуправляемых вещей, поэтому может легко работать на любой ОС. Но когда я запустил проверку переносимости моего решения, он показал, что все в порядке с моим Expression
часть генератора, но ныть на Emit
обыкновения.
Вот анализ для net452
,netstandard1.6
а также netstandard2.0
,
У меня вопрос: есть ли какой-нибудь современный и рекомендуемый способ генерирования классов во время выполнения, который поддерживается.Net Standard, или я могу просто забыть о переносе в него моей библиотеки?
1 ответ
Ну, я обнаружил, что в настоящее время в .Net Standard
у нас есть деревья выражений для генерации автономных делегатов и старомодных Emit
(доступен с System.Reflection.Emit
а также System.Reflection.Emit.Lightweight
пространства имен) для отдыха. К сожалению, мы потеряли мост между первым и вторым (я имею в виду LambdaExpression.CompileToMethod
смотри вопрос)
Так что, как правило, мощность генерации кода практически такая же, как и в полном рабочем столе .Net
пока вам не нужно генерировать типы во время выполнения (например, реализовать какой-нибудь интерфейс на лету). В этом случае вы вынуждены излучать IL вручную.