Генерация кода с помощью.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 вручную.

Другие вопросы по тегам