Для чего используются папки obj и bin (созданные Visual Studio)? - PullRequest
186 голосов
/ 15 марта 2011

Я создал новый проект в Visual Studio 2010 и заметил, что теперь в папке моего проекта есть две новые папки с именами obj и bin.

Подобная пара папок создается при сборке и отладке - для чего эти папки?

Ответы [ 4 ]

200 голосов
/ 15 марта 2011

Папка obj содержит объект или промежуточные файлы , которые представляют собой скомпилированные двоичные файлы, которые еще не были связаны. По сути, это фрагменты, которые будут объединены для создания окончательного исполняемого файла. Компилятор создает один объектный файл для каждого исходного файла, и эти файлы помещаются в папку obj.

Папка bin содержит двоичных файлов , которые являются фактическим исполняемым кодом для вашего приложения или библиотеки.

Каждая из этих папок подразделяется на папки Debug и Release, которые просто соответствуют конфигурациям сборки проекта. Обсуждаемые выше два типа файлов помещаются в соответствующую папку, в зависимости от того, какой тип сборки вы выполняете. Это позволяет легко определить, какие исполняемые файлы создаются с использованием символов отладки, а какие - с включенной оптимизацией и готовой к выпуску.

Обратите внимание, что вы можете изменить место, где Visual Studio выводит ваши исполняемые файлы во время компиляции, в свойствах вашего проекта. Вы также можете изменить имена и выбранные параметры для ваших конфигураций сборки.

21 голосов
/ 10 июня 2018

Я бы посоветовал вам посмотреть это видео на YouTube, которое демонстрирует разницу между папками C # bin и obj , а также объясняет, как мы получаем преимущества от инкрементной / условной компиляции.

Компиляция C # представляет собой двухэтапный процесс, для получения более подробной информации см. Диаграмму ниже: -

  1. Компиляция: - На этапе компиляции отдельные файлы кода C # компилируются в отдельные скомпилированные блоки. Эти отдельные файлы скомпилированного кода находятся в каталоге OBJ.
  2. Связывание: - На этапе связывания эти отдельные файлы скомпилированного кода связываются для создания единого DLL и EXE-файла. Это идет в каталоге BIN.

C# bin vs obj folders

Если вы сравните каталог bin и obj, вы найдете большее количество файлов в каталоге "obj", так как он содержит отдельные файлы скомпилированного кода, в то время как "bin" состоит из одного блока.

bin vs obj

16 голосов
/ 15 марта 2011

Каталог obj предназначен для промежуточных объектных файлов и других временных файлов данных, которые создаются компилятором или системой сборки во время сборки.Каталог bin - это каталог, в который будут записываться конечные выходные двоичные файлы (и любые зависимости или другие развертываемые файлы).

Вы можете изменить фактические каталоги, используемые для обеих целей в настройках проекта, если хотите,

3 голосов
/ 08 августа 2017

Один интересный факт о каталоге obj: если вы настроили публикацию в веб-проекте, файлы, которые будут опубликованы, размещаются в obj \ Release \ Package \ PackageTmp. Если вы хотите публиковать файлы самостоятельно, а не использовать встроенную функцию VS, вы можете захватить файлы, которые вам действительно нужно развернуть здесь, вместо того, чтобы собирать весь мусор в каталоге bin.

...