Visual Studio에서 만든 obj 및 bin 폴더는 무엇에 사용됩니까?


222

난 비주얼 스튜디오 2010에서 새 프로젝트를 생성라는 두 개의 새 폴더가 지금 있다는 것을 발견 obj하고 bin내 프로젝트 디렉토리입니다.

빌드 및 디버깅 할 때 비슷한 폴더 쌍이 만들어집니다. 이러한 폴더는 무엇입니까?

답변:


238

obj폴더는 보유 목적, 또는 중간, 파일을 아직 연결되지 않은 바이너리 파일을 컴파일된다. 그것들은 본질적으로 최종 실행 파일을 생성하기 위해 결합되는 조각입니다. 컴파일러는 각 소스 파일에 대해 하나의 객체 파일을 생성하며 해당 파일은 obj폴더에 저장됩니다.

bin폴더에는 응용 프로그램이나 라이브러리의 실제 실행 코드 인 이진 파일 이 들어 있습니다.

이러한 각 폴더는 프로젝트의 빌드 구성에 해당하는 폴더 DebugRelease폴더 로 세분화됩니다 . 위에서 설명한 두 가지 유형의 파일은 수행하는 빌드 유형에 따라 적절한 폴더에 저장됩니다. 이를 통해 디버깅 기호로 빌드 된 실행 파일과 최적화가 활성화되어 릴리스 준비가 된 실행 파일을 쉽게 결정할 수 있습니다.

프로젝트 속성에서 컴파일하는 동안 Visual Studio가 실행 파일을 출력하는 위치를 변경할 수 있습니다. 빌드 구성에 대한 이름과 선택한 옵션을 변경할 수도 있습니다.


4
어떤 이유로 든 내 프로젝트에는 obj 및 bin 폴더에 대한 디버그 또는 릴리스 하위 폴더가 없습니다. 현재 선택된 구성에 따라 디버그 / 릴리스 하위 폴더로 빌드하기 위해 프로젝트 설정을 편집하면 응용 프로그램을 디버깅 할 때 데이터 유형을 만들 수 없다는 오류가 발생합니다. 내 응용 프로그램은 dll의 bin 폴더에서만보고 디버그 또는 릴리스 폴더를 찾지 않습니다. 이 문제를 어떻게 해결합니까?
Anil Natha

3
@Sly 나는 당신이 무엇을 요구하는지 이해하지 못합니다. 프로젝트는 응용 프로그램 (EXE) 또는 라이브러리 (DLL)를 빌드합니다. 둘 다 만들 수는 없습니다. 따라서 프로젝트가 응용 프로그램을 만들면 bin 폴더에 DLL을 배치하지 않습니다. 프로젝트에서 라이브러리를 빌드하면 DLL을 실행할 수 없기 때문에 디버깅하려고 할 때 오류가 발생합니다. 어쨌든 프로젝트 속성에서 기본 출력 경로를 변경 한 것처럼 들립니다. 도움이 더 필요하면 새로운 질문을하십시오. 필요한 경우 프로젝트 구성의 스크린 샷을 포함하여 문제를 잘 문서화하십시오.
코디 그레이

2
빌드가 완료된 후 Visual Studio에서 obj 폴더를 강제로 삭제할 수 있는지 궁금합니다.
Johnny_D

2
@SlyRaskal 웹 프로젝트를 개발하는 경우 디버그 / 릴리스 폴더가없는 이유 중 하나는?
Tim Iles

2
링크되지 않은 객체 코드 파일 obj만 포함 합니까 ? 내 경험상 여기에는 모든 것이 포함되어 있으며 최종 빌드 단계에서 "최종 세트"의 일부인 파일이에 복사 됩니다 . bin
ivan_pozdeev

44

C # bin과 obj 폴더 의 차이점을 보여주는이 YouTube 비디오를 보도록 권합니다. 증분 / 조건부 컴파일의 이점을 얻는 방법을 설명하는 .

C # 컴파일은 2 단계 프로세스입니다. 자세한 내용은 아래 다이어그램을 참조하십시오.

  1. 컴파일 단계 : 컴파일 단계에서 개별 C # 코드 파일은 개별 컴파일 단위로 컴파일됩니다. 이러한 개별 컴파일 된 코드 파일은 OBJ 디렉토리에 있습니다.
  2. 연결 : 연결 단계에서 이러한 개별 컴파일 된 코드 파일은 단일 단위 DLL 및 EXE를 만들기 위해 연결됩니다. 이것은 BIN 디렉토리에 들어갑니다.

C # bin과 obj 폴더

bin과 obj 디렉토리를 비교하면 "bin"에 단일 단위가 있고 개별 컴파일 된 코드 파일이 있으므로 "obj"디렉토리에 더 많은 파일이 있습니다.

빈 대 obj


20

obj디렉토리는 빌드하는 동안 컴파일러 또는 빌드 시스템에서 생성되는 중간 오브젝트 파일 및 기타 임시 데이터 파일입니다. bin디렉토리는 최종 출력 바이너리 (및 종속성 또는 기타 배포 파일)에 기록됩니다 디렉토리입니다.

원하는 경우 프로젝트 설정 내에서 두 가지 용도로 사용되는 실제 디렉토리를 변경할 수 있습니다.


"bin"은 프로젝트 속성-> "빌드"-> "출력"-> "출력 경로"에서 변경할 수 있습니다. 그러나 "obj"는 어떻습니까?
피터 Mortensen

5

obj 디렉토리에 대한 흥미로운 사실 ​​: 웹 프로젝트에서 공개 설정을 한 경우 공개 될 파일은 obj \ Release \ Package \ PackageTmp로 스테이징됩니다. 통합 VS 기능을 사용하지 않고 직접 파일을 게시하려는 경우 bin 디렉토리의 모든 디지털 파편을 선택하지 않고 실제로 배치해야하는 파일을 가져올 수 있습니다.


0

setup프로젝트를 사용하는 경우 주의하십시오 . Visual Studio 설치 프로젝트 Primary Outputobj폴더가 아닌 폴더 에서 가져옵니다 .bin .

폴더 어셈블리 msi에서 빌드 후 절차를 수행 할 때 배포 된 응용 프로그램 파일이 실제로 난독 처리되지 않았거나 서명되지 않았으며 bin폴더를 대상으로 obj지정 해야한다는 사실을 발견하기 전에 오랫동안 난독 처리 및 설정에 서명 한 것으로 생각되는 응용 프로그램을 릴리스 했습니다. 대신 어셈블리.

이것은 직관적 인 imho와는 거리가 멀지 만 일반적인 setup접근 방식은 Primary Output프로젝트 를 사용하는 것이며 obj폴더입니다. 누군가 가이 btw에 약간의 빛을 비출 수 있다면 그것을 좋아합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.