Можно ли удалить операторы .property из файлов ILAsm для производственного использования? - PullRequest
2 голосов
/ 23 апреля 2011

Все еще работаю над моей программой запутывания, основанной на изменении файлов ILAsm.(Ссылка Какие имена методов C # не следует скрывать? )

При просмотре кода ILAsm создается впечатление, что операторы .property ни для чего не используются, по крайней мерене для выполнения программы.Правильно ли я считаю, что они предназначены только для предоставления метаданных для Visual Studio?И если да, то можно ли просто удалить их, когда код ILAsm будет использоваться только для создания производственных модулей, которые никогда не будут использоваться с Visual Studio?

1 Ответ

4 голосов
/ 23 апреля 2011

Вы правы, что то, что что-то объявлено как свойство, не влияет на выполнение программы. Как говорится в книге Внутри Microsoft .NET IL Assembler , во введении к главе о свойствах JIT-компилятор и механизм выполнения полностью не знают о свойствах, и никакие инструкции IL не ссылаются на концепцию свойства. 1003 *

Обратите внимание, что Visual Studio не единственный потребитель метаданных. Если вы удалите .property и соберете заново, у вас будут методы getter и setter, но это, очевидно, больше не является свойством. Наиболее очевидный пример того, где это становится проблемой: что, если экземпляр объекта будет передан другому методу, который использует отражение для вызова каждого свойства в классе? Свойства не будут найдены, и поведение во время выполнения изменилось в результате предложенного метода запутывания.

Конечно, такие сценарии, как отражение и сериализация, являются обычным явлением с инструментами запутывания, как обсуждалось в вашем предыдущем вопросе. Итак, то, что я говорю, это проблематично, но проблематично в том же наборе сценариев, что и обсуждаемые в вашем другом потоке - особенно в тех сценариях, где используются метаданные или сериализация выполняется во время выполнения.

Последнее издание упомянутой мной книги имеет другое название: Expert .NET 2.0 IL Assembler ; это может быть полезной ссылкой для вас. Компиляция для .NET Common Language Runtime также может быть полезна.

...