Я создал новый проект в Visual Studio 2010 и заметил, что в моей директории проектов теперь есть две новые папки с именем obj
и bin
.
Аналогичная пара папок создается при построении и отладке - для чего эти папки?
Я создал новый проект в Visual Studio 2010 и заметил, что в моей директории проектов теперь есть две новые папки с именем obj
и bin
.
Аналогичная пара папок создается при построении и отладке - для чего эти папки?
В папке obj
хранится объект или промежуточный файл, которые являются скомпилированными двоичными файлами, которые еще не были связаны. Это, по сути, фрагменты, которые будут объединены для создания окончательного исполняемого файла. Компилятор создает один объектный файл для каждого исходного файла, и эти файлы помещаются в папку obj
.
В папке bin
хранятся двоичные файлы, которые являются фактическим исполняемым кодом для вашего приложения или библиотеки.
Каждая из этих папок далее подразделяется на папки Debug
и Release
, которые просто соответствуют конфигурациям сборки проекта. Два типа файлов, описанных выше, помещаются в соответствующую папку, в зависимости от того, какой тип сборки вы выполняете. Это позволяет легко определить, какие исполняемые файлы создаются с помощью отладочных символов и которые были созданы с включенными и готовыми к выпуску оптимизациями.
Обратите внимание, что вы можете изменить, где Visual Studio выводит исполняемые файлы во время компиляции в свойстве проекта. Вы также можете изменить имена и выбранные параметры для своих конфигураций сборки.
Каталог obj
предназначен для промежуточных файлов объектов и других файлов временных данных, которые генерируются системой компилятора или сборки во время сборки. Каталог bin
- это каталог, в который будут записываться окончательные выходные двоичные файлы (и любые зависимости или другие файлы для развертывания).
Вы можете изменить фактические каталоги, используемые для обеих целей в рамках параметров проекта, если хотите.
Один интересный факт об каталоге obj: если у вас есть публикация, настроенная в веб-проекте, файлы, которые будут опубликованы, будут поставлены в obj\Release\Package\PackageTmp. Если вы хотите публиковать файлы самостоятельно, а не использовать встроенную функцию VS, вы можете захватить файлы, которые вам действительно нужны для развертывания здесь, а не выбирать все цифровые мусора в каталоге bin.
Я бы посоветовал вам увидеть это видео на YouTube, которое демонстрирует разницу между С# bin и obj folders, а также объясняет, как мы получаем выгоду от инкрементная/условная компиляция.
Компиляция С# представляет собой двухэтапный процесс, см. ниже диаграмму для более подробной информации: -
Если вы сравниваете каталог bin и obj, вы найдете больше файлов в каталоге "obj", поскольку у него есть отдельные скомпилированные файлы кода, в то время как "bin" имеет один блок.