Я использую ILMerge , чтобы объединить мои сборки в одну, а затем пропустить эту единственную сборку через выбранный обфускатор. В ILMerge есть возможность изменить все типы на Внутренние - я использую этот флаг для повышения эффективности обфускатора. ILMerge прекрасно работает на исполняемых файлах .NET 3.5 - однако у меня еще не было возможности протестировать его с бета-версиями .NET 4.
Все это можно сделать прозрачно, добавив команду post-build в ваш финальный исполняемый файл.
Обфускатор, которым я пользуюсь, кстати, бесплатный Вавилонский обфускатор .