Большинство проблем, с которыми я столкнулся при запутывании, связано с типами, имена которых не могут быть изменены, потому что что-то должно отражаться на них (ваш код или среда выполнения).
например, если у вас есть класс, который используется в качестве прокси-сервера веб-службы, вы не можете смутно скрыть имя класса:
public class MyWebServiceProxy : SoapHttpClientProtocol
{
}
Также некоторые обфускаторы не могут обрабатывать универсальные методы и классы.
Хитрость в том, что вам нужно найти эти типы и не дать обфускатору переименовать их. Это делается с помощью атрибута обфускации:
[global::System.Reflection.Obfuscation(Exclude=true, Feature="renaming")]