У нас есть обсуждение. Какова цель каталога "obj" в .NET?
Что такое "obj" для .NET?
Ответ 1
Папка "obj" используется для хранения временных файлов объектов и других файлов, используемых для создания окончательного двоичного файла во время процесса компиляции.
Папка "bin" - это папка вывода для полных бинарных файлов (сборок).
Ответ 2
В дополнение к splattne answer, я считаю, что причина его наличия (а не очистка после сборки) заключается в поддержке инкрементной компиляции. Если вы уже скомпилировали 100 классов и изменили один из них, гораздо эффективнее просто перекомпилировать код для одного измененного класса и собрать exe/dll из смеси нового и старого кода.
Конечно, инкрементная компиляция намного сложнее, чем просто, - она должна отслеживать все, чтобы она могла обнаружить, когда нужно перекомпилировать класс, даже если сам этот класс не изменился. (например, если новая перегрузка становится доступной в классе - некоторые вызывающие могут быть перекомпилированы.)