К сожалению, короткий ответ на простой способ — «Нет». Но есть надежда.
Проблема в том, что ссылки на исходный тип, скорее всего, разбросаны по сгенерированному IL для этого типа. Примером может служить установщик свойств, который обновляет значение частного поля. Поле, на которое ссылается этот установщик, — это поле, находящееся в исходном свойстве. На самом деле, даже установщик свойства для самого свойства является ссылкой на метод в исходном типе сборки.
Чтобы это работало, вам нужно просмотреть каждую ссылку в сгенерированной сборке (структуру, переменные, инструкции и т. д.), а те, которые ссылаются на себя, должны быть обновлены, чтобы вместо этого ссылаться на вновь созданный тип.
Я знаю, что это сложная проблема, потому что я написал код, который делает часть того, что вы ищете. Мой код фактически дополнительно копирует содержимое исходного типа в целевой тип, чтобы включить примеси в C#. Если вы потратите время на то, чтобы посмотреть, как работает код, вы можете изменить его. Вот несколько ссылок на код Bix.Mixers, которые могут оказаться полезными.
Проект: https://github.com/rileywhite/Bix.Mixers.Fody
Клон каркаса структуры: https://github.com/rileywhite/Bix.Mixers.Fody/blob/master/src/Bix.Mixers/Fody/ILCloning/ClonerGatheringVisitor.cs
Перенаправление ссылок с исходного на созданный тип (см. методы RootImport): https://github.com/rileywhite/Bix.Mixers.Fody/blob/master/src/Bix.Mixers/Fody/ILCloning/ILCloningContext.cs
person
rileywhite
schedule
30.10.2014