Нет, вы определенно не должны ставить под угрозу структуру вашего проекта только для обфускатора.
В общем, у обфускаторов есть режим, в котором вы можете сказать: «Здесь вся моя система, предположим, что никто больше ничего не делает», что фактически говорит об этом, как об одном блоке кода.
Можно использовать такие приемы, как использование internal
вместе с InternalsVisibleToAttribute
(по умолчанию многие обфускаторы будут более агрессивными с internal
, чем public
.
Все, что нужно оставить как есть, например, для доступа System.Reflection
или dynamic
, может быть помечено ObfuscationAttribute
, чтобы сказать обфускатору "Не трогай это".
Существуют и другие компромиссы, которые следует учитывать при добавлении слоев фасада, которые действуют как мосты между компонентами, а затем создают внутренние классы за этим - в зависимости от контекста, который может облегчить обратный инжиниринг (вы передаете otu краткое резюме) или сложнее (у вас был базовый класс, и вы раздавали множество подсказок, имея при себе некоторые ключевые методы, например, не переименованные).