Сценарий Unity не будет обновляться после первого успешного плетения с Mono.Cecil

Я использую Mono.Cecil для модификации сборок после компиляции в Unity (я использую эту реализацию Моно.Сесил). По какой-то причине, если я добавляю поле к типу в сборке, а тип поля является типом делегата, который я определил, скрипты в сборке не обновляются после первой успешной модификации/переплетения.

Следующий код работает правильно каждый раз, когда я перекомпилирую, но если я попытаюсь заменить PropertyChangedEventHandler настраиваемым типом делегата, сборка правильно компилируется и переплетается только один раз, а затем отказывается компилироваться/обновляться с более новыми изменениями сценария. Это снова работает, только если я перезапущу Unity. Я не получаю никаких сообщений об ошибках:

var handlerReference = typeDefinition.Module.ImportReference(typeof(System.ComponentModel.PropertyChangedEventHandler));
 
var fieldDef = new FieldDefinition(nameof(INotifyMethodCalled.MethodCalled), FieldAttributes.Private | FieldAttributes.NotSerialized, handlerReference);

typeDefinition.Fields.Add(fieldDef);

Любая помощь будет принята с благодарностью.


person Jake    schedule 22.03.2021    source источник


Ответы (1)


Я только что решил свою проблему - скрипт, выполняющий переплетение, ссылался на сборку, которую он переплетал. Это был программный эквивалент змеи, поедающей свой хвост и подавившейся им. Сценарий, использующий Mono.Cecil, больше не ссылается на свою целевую сборку.

person Jake    schedule 22.03.2021