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