А меня всё мучает вопрос, компилятор C вроде бы удаляет из готового exe-шника неиспользуемые подпрограммы, почему тут не работает? Вы для совместимости или чего то типо того специальной директивой этой сделали? Или я не правильно понимаю что именно он удаляет?
Изначально не было такой цели. Сейчас сложно переделывать. То есть, идею я понимаю, но она дорога в реализации.
По поводу “вроде бы удаляет” - я думаю, что разные компиляторы поступают по-разному. Несомненно, высокоэффективные компиляторы стараются удалять всё лишнее, но не всегда это возможно.
Близкий к нам по идеологии компилятор Delphi Prism (это Delphi под .NET) точно хранит какой-то код для поддержки стандартных библиотек.
Компилятор C++ под платформу .NET также прилинковывает к exe файлу много чего.
Так что я отношу ваше предложение к серии трудно реализуемых хотелок.
Несомненно, я согласен с Вами, что язык C# как “чистый” язык платформы .NET не добавляет ничего лишнего - особенно если создавать проект не студией, а консольным компилятором.
Там готовый .exe, у которого есть деинсталлятор в том числе. Поставить и удалить быстро.
Все-же, как показывает практика, это не просто желание, а чья-то потребность… Меня мучает вопрос, зачем добавлять в exe-шник что-то лишнее, что бы потом, при компиляции, это искать и удалять?
И у нас тоже добавляются только используемые сущности. Просто некоторые классы и функции по цепочке восстанавливаются из pcu, например из секции инициализации модуля, поэтому и получается 20Кб.