Однако не похоже, что PostSharp можно использовать с Unity, если только вы не создадите его как DLL (и даже тогда неясно, какие платформы будут его поддерживать, следует ли использовать более старую версию и т. д.).
Я рассматривал стороннюю библиотеку под лицензией MIT, которая использует Mono.Cecil для создания эквивалентных определений OnEntry/OnExit, но не фиксирует исключения в OnExit, а просто вставляет вызов перед последним Инструкция в функции.
Учитывая, что генерацию/повторную генерацию исключения можно попробовать/перехватить, как можно определить по последовательности инструкций (каждая из которых имеет код операции), которая инструкции действительно выходят из функции?
Пытался вставить перед каждым OpCodes.Ret, что было хорошо для ранних вызовов возврата, но, очевидно, обнаружил, что обработка исключений не будет использовать OpCodes .Ret и просто проверка OpCodes.Throw/
Код: Выделить всё
OpCodes.Rethrow
Изменить: также реализована проверка OpCodes.Ret, которая не очень хорошо сочетается с использованием сопрограммой «возврата доходности».
Edit2: Исключения, создаваемые функциями, вызываемыми в теле функции, таким образом не будут обнаружены.
Edit3: Функции, которые заканчиваются операторами итератора, такими как foreach, не завершаются с помощью OpCodes.Ret.< /п>
Подробнее здесь: https://stackoverflow.com/questions/790 ... st-opcodes