По-прежнему работает над моей программой обфускации, основанной на изменении файлов ILAsm. (Ссылка Какие имена методов С# не должны быть запутаны?)
При взгляде на код ILAsm создается впечатление, что операторы .property не используются ни для чего, по крайней мере, для выполнения программы. Правильно ли я думаю, что они существуют только для предоставления метаданных для Visual Studio? И если да, можно ли просто удалить их, когда код ILAsm будет использоваться только для создания производственных модулей, которые никогда не будут использоваться с Visual Studio?
Вы правы, что факт что-то объявляется как свойство, не влияет на выполнение программы. Как говорится в книге Внутри Microsoft.NET IL Assembler во введении к главе о свойствах, JIT-компилятор и механизм выполнения полностью не знают свойств, и никакие IL-инструкции не ссылаются на концепцию свойства.
Обратите внимание, что Visual Studio не является единственным потребителем метаданных. Если вы разделите .property
и снова соберите, у вас будут методы getter и setter, но это, очевидно, уже не свойство. Самый очевидный пример того, где это становится проблемой: что, если экземпляр объекта передается другому методу, который использует отражение для вызова каждого свойства в классе? Свойства не будут найдены, а поведение во время выполнения изменилось в результате предлагаемого метода обфускации.
Конечно, сценарии, такие как рефлексия и сериализация, - это обычная магия с инструментами обфускации, о чем говорилось в предыдущем вопросе. Итак, я говорю о том, что это проблематично, но его проблематично в аналогичном наборе сценариев, которые обсуждаются в вашем другом потоке, особенно в тех сценариях, где метаданные потребляются или сериализуются во время выполнения.
В последнем выпуске книги, упомянутой выше, есть другое название: Expert.NET 2.0 IL Assembler; это может быть полезной ссылкой на вас. Компиляция для .NET Common Language Runtime также может быть ценной.