Ответы:
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папка. Я был бы рад, если бы кто-то мог пролить свет на это, кстати.