Visual Studio에서 Build Solution, Rebuild Solution 및 Clean Solution의 차이점은 무엇입니까?


1136

Visual Studio에서 Build Solution, Rebuild Solution 및 Clean Solution의 차이점은 무엇입니까?

이들 각각을 사용하기에 적절한시기는 언제입니까?




2
재 구축은 정리 후 빌드와 동일합니까?
Colonic Panic

@ColonelPanic yes
Alan Birtles

답변:


921
  • 빌드 솔루션 은 증분 빌드를 수행합니다 . 프로젝트를 다시 빌드 할 필요 가 없다고 생각 되면 그렇지 않습니다. 변경되지 않은 경우 부분적으로 빌드 된 프로젝트 비트를 사용할 수도 있습니다 (얼마나 오래 걸리는지 모르겠습니다)
  • 솔루션다시 빌드하면 이전에 수행 한 모든 작업을 무시하고 처음부터 솔루션 을 정리 한 다음 빌드합니다. 이것과 "Clean, 그 다음에 Build"의 차이점은 Rebuild는 모든 프로젝트를 정리 한 다음 모두 빌드하는 것이 아니라 각 프로젝트를 한 번에 하나씩 정리하고 빌드한다는 것입니다.
  • 클린 솔루션 은 이전 빌드에서 빌드 아티팩트를 제거합니다. 빌드 대상 디렉토리 (bin 및 obj)에 다른 파일이 있으면 제거 할 수 없지만 실제 빌드 아티팩트는 있습니다. 나는이 변화에 대한 행동을 보았습니다. 때로는 완전히 철저히 삭제하지 않을 수도 있습니다.

링크는 devenv.exe 명령 행 스위치에 대한 것이지만 메뉴 항목과 동일합니다.


2
@womp : 방금 본 프로젝트가 아닙니다. 그것은 여전히 ​​모든 어셈블리를 가지고 있습니다 ...
Jon Skeet

1
@Jon-이상하다. 나는 그 디렉토리를 정리하지 않은 깨끗한 것을 기억하지 못한다. 지금하고 있으며 모든 .dll 및 .pdb 파일을 지우고 있습니다. 그래도 내 ReSharper 정크는 그대로 둡니다.
womp

156
나는 개인적으로 "청결한 해결책"이 도움이되지 않는다는 것을 발견했다. 내가하면 정말 수동으로 빈과 OBJ 폴더를 삭제, 깨끗 원하는 길을 가야하는 것입니다. 심지어 내가 할 때까지 팬텀 "오류"를 쫓는 것에 걸렸다. 청소는 신뢰할 수 없습니다.
Chris Rogers

7
아티팩트가 빌드 아티팩트 (예 : cproj에서 msbuidltask로 통합 된 다른 소스의 사본) 이외의 다른 수단을 통해 진행된 경우 해당 아티팩트를 그대로 둡니다. 그것은 거의 쓸모가 없게 만듭니다. 나는 그것이 청결하다는 잘못된 감각으로 당신을 떠날 것이므로 위험하다고 말합니다.
Newtopian

4
@verdana : github 등의 경우 괜찮은 .gitignore파일 을 갖는 것이 더 간단 합니다. 그러나 대답에 따라 Clean은 항상 내 경험에서 특히 철저한 작업을 수행하지는 않습니다.
Jon Skeet

455

빌드 솔루션 : 변경된 코드 파일 (DLL 및 EXE)을 컴파일합니다.

Rebuild : 코드가 변경되었는지 여부에 관계없이 컴파일 된 모든 파일을 삭제하고 다시 컴파일합니다.

클린 솔루션 : 모든 컴파일 된 파일 (DLL 및 EXE 파일)을 삭제합니다.

차이점을 시연 한 아래의 YouTube 비디오 ( Visual Studio Build vs. Rebuild vs. Clean (C # 인터뷰 질문) )를 볼 수 있습니다. 아래는 시각적 표현으로,이를 자세히 분석하는 데 도움이됩니다.

빌드 대 재구성

Rebuild와 (Clean + Build)의 차이점은 다음과 같이 혼란 스러울 것 같습니다.

차이점은 모든 프로젝트에서 빌드 및 정리 시퀀스가 ​​발생하는 방식입니다. 솔루션에“proj1”과“proj2”라는 두 개의 프로젝트가 있다고 가정 해 봅시다. 다시 빌드하는 경우 "proj1"이 필요하고 "proj1"에 대해 컴파일 된 파일을 정리 (삭제)하고 빌드하십시오. 그런 다음 두 번째 프로젝트 "proj2"가 필요하고 "proj2"에 대해 컴파일 된 파일을 정리하고 "proj2"를 컴파일합니다.

그러나 "clean"및 build "를 수행하면 먼저"proj1 "및"proj2 "에 대해 컴파일 된 모든 파일을 삭제 한 다음"proj1 "을 먼저 빌드 한 다음"proj2 "를 빌드합니다.

클린 대 재건


26
Rebuild가 항상 작동하지 않는 이유를 설명해 주셔서 감사합니다. 빌드를 수행하기 전에 정리해야하는 경우가 종종 있습니다.
Didier A.

4
예, 설명과 두 번째 다이어그램은 매우 유용하고 명확했습니다. "불법적 인"플로차트를 고칠 수 있다면, 예가 한 곳으로 만 가면 도움이 될 것입니다. 특히 "Rebuild"아래의 "Build ALL"을 사용하면 그 말을 이해하려고 할 수 없습니다.
Jon Coombs

@JonCoombs 그래, 첫 번째 플로차트가 비디오에서 말한 것과 정확히 일치한다고 생각하지 않습니다. 나는 생각 나는 삽입 한 이미지가 Shivprasad가 목표로 한 것입니다.
ruffin

내가 이것을 이해하면, 어떤 파일이 변경되었는지,이 프로젝트는 중 아무것도하지 않는 것입니다 의미하는 일반 빌드 청소하거나 청소하고 프로젝트를 빌드합니다. 이 올바른지?
더 명확한

147

이 링크 에서 가져온 :

빌드는 마지막 빌드 이후에 변경된 소스 파일 만 컴파일하고 링크하는 것을 의미하는 반면, Rebuild는 변경 여부에 관계없이 모든 소스 파일을 컴파일하고 링크하는 것을 의미합니다. 빌드는 정상적인 작업이며 더 빠릅니다. 때로는 프로젝트 대상 구성 요소의 버전이 동기화되지 않을 수 있으며 빌드를 성공적으로 수행하기 위해 다시 빌드해야합니다. 실제로는 청소할 필요가 없습니다.



1
링크? 동적 링크 라이브러리 (Dynamic Link Library)라는 DLL의 아이디어가 런타임에 링크 될 것이라고 생각 했습니까?
The Dag

7
"실제로 청소할 필요가 없습니다"<-나는 이것에 대해 BS를 부릅니다.
piers7

2
piers7 당신은 당신이 청소 대 재건 해야하는 이유를 제공 할 수 있습니까?
PaulBinder


46

빌드 솔루션 -파일이 변경된 어셈블리를 빌드합니다. 어셈블리에 변경 사항이 없으면 다시 빌드되지 않습니다. 중간 파일도 삭제하지 않습니다.

가장 일반적으로 사용됩니다.

솔루션 재 구축 -변경 사항에 관계없이 모든 어셈블리를 재 구축 하지만 중간 파일은 남겨 둡니다.

Visual Studio가 변경 내용을 최신 어셈블리에 포함하지 않은 경우에 사용됩니다. 때때로 Visual Studio는 실수를합니다.

클린 솔루션 -모든 중간 파일을 삭제하십시오.

다른 모든 것이 실패하고 모든 것을 정리하고 새로 시작해야 할 때 사용됩니다.


25
클린은 빌드를하지 않습니다.
Jon Skeet

3
@ Jon Skeet-매일 새로운 것을 배우십시오. 나는 그것을 재건했다고 맹세했을 것입니다. 내 기억이 내가 원하는만큼 항상 신뢰할 수있는 것은 아니라고 생각합니다.
Justin Niessner

16

Rebuild는 Clean을 먼저 수행 한 다음 Build를 수행하는 것으로 생각합니다. 아마도 내가 틀렸다 ... 코멘트?


이것은 지금까지 공표가 없었으며 문서에 따르면 (존의 답변 링크를 참조하십시오) 이것은 정확히 맞습니다.
Tod

2
나는 그렇게 생각하지 않습니다. Clean Solution을 수행 한 다음 Build Solution이 작동하지만 Rebuild Solution을 수행하는 데 실패하는 상황이 있습니다. 이것은 2 개의 프로젝트 (하나는 다른 프로젝트에 종 속됨)로 새로 생성 된 솔루션입니다.
Cthutu

@Cthutu 여기서 차이를 만드는 세부 사항은 Shivprasad의 답변을 참조하십시오. Rebuild는 한 번에 하나씩 개별 프로젝트를 정리하고 빌드하는 반면 Clean을 실행하면 모든 것이 한 번에 정리되고 Build는 한 번에 모두 빌드됩니다. 클린 / 빌드 순서 의이 변경으로 인해 컴파일과 컴파일이 아닌 차이가있는 인스턴스를 살펴 보았습니다.
Sean

@Sean 어쩌면 솔루션 file reference대신 프로젝트에 프로젝트를 추가 project reference하여 프로젝트 빌드 순서가 특정 프로젝트를 다른 프로젝트보다 먼저 빌드해야한다는 것을 인식하지 못했기 때문에 발생했을 수 있습니다. 짓다?
Zack

14

빌드 솔루션 – 파일이 변경된 어셈블리를 빌드합니다. 어셈블리에 변경 사항이 없으면 다시 빌드되지 않습니다. 중간 파일도 삭제하지 않습니다.

솔루션다시 빌드하면 이전에 수행 한 모든 작업을 무시하고 처음부터 솔루션 을 정리하고 빌드합니다.

Clean Solution 은 bin / obj 디렉토리에서 컴파일 된 모든 파일 (예 : EXE 및 DLL)을 삭제합니다.


8

빌드 솔루션은 변경된 솔루션의 모든 프로젝트를 빌드합니다. Rebuild는 무엇이든 상관없이 모든 프로젝트를 빌드합니다. 클린 솔루션은 모든 임시 파일을 제거하여 다음 빌드가 완료되도록합니다.


6

빌드 솔루션 -빌드 솔루션은 파일을 변경하는 프로젝트 수를 빌드하여 애플리케이션을 빌드합니다. 그리고 기존 바이너리 파일을 지우지 않고 bin 또는 obj 폴더에서 업데이트 된 어셈블리를 바꿉니다.

솔루션 재 구축 - 솔루션 재 구축은 솔루션에서 사용 가능한 모든 프로젝트를 정리하여 빌드하여 전체 애플리케이션을 빌드합니다. 빌드하기 전에 bin 및 obj 폴더에서 모든 이진 파일을 지 웁니다.

클린 솔루션 -클린 솔루션은 bin 및 obj 폴더에서 모든 이진 파일을 지 웁니다.


5

솔루션 구축

증분 빌드가 수행됩니다. 즉, 변경된 코드 파일 만 빌드합니다. 그들이 변경되지 않은 경우 해당 파일은 건드리지 않습니다.

솔루션 재 구축

이렇게하면 현재 컴파일 된 모든 파일 (예 : exe 및 DLL)이 삭제되고 파일에 코드 변경 여부에 관계없이 처음부터 모든 것을 빌드합니다.

깨끗한 솔루션 메뉴

이 메뉴는 bin / obj 디렉토리에서 컴파일 된 모든 파일 (예 : EXE 및 DLL)을 삭제합니다.

재 구축 = 청소 + 제작


4

사람들이 빠뜨릴 것이라고 생각하는 가장 중요한 것은 Build and Clean이 Visual Studio의 프로젝트 / 솔루션에 대한 지식을 기반으로 수행되는 작업이라는 것입니다. Clean이 작동하지 않거나 남은 파일을 남기지 않거나 신뢰할 수 없다는 불만이 많습니다. 실제로 신뢰할 수 없다고 말하는 이유가 실제로 더 신뢰할 수 있습니다.

Clean은 Visual Studio 또는 컴파일러 자체에서 실제로 생성 한 파일 및 / 또는 디렉토리 만 제거 (정리)합니다. 자신의 파일 또는 파일 / 폴더 구조를 외부 도구 나 소스에서 복사하면 Visual Studio는 "그들이 존재한다는 것을 알지 못"하므로이를 만지지 않아야합니다.

Clean 작업이 기본적으로 "del *. *"를 수행했는지 상상할 수 있습니까? 이것은 치명적일 수 있습니다.

빌드 는 변경되었거나 필요한 프로젝트에서 컴파일을 수행합니다.

Rebuild 는 변경 또는 필요한 사항에 관계없이 컴파일을 수행합니다.

정리 는 과거에 만든 파일 / 폴더를 제거하지만 처음에는 관련이없는 항목은 남겨 둡니다.

나는 이것이 조금 정교하고 도움이되기를 바랍니다.


4

나는 AA 빈 솔루션이 BuildRebuildClean세 클래스 라이브러리를 Models, Repository, Notification.

내가 사용 Models하고 Repository있는 Notification클래스 라이브러리.

그때:

  • 빌드 솔루션 증분 빌드 및 변경된 파일 만 컴파일합니다. 어셈블리에 변경 사항이 없으면 다시 빌드되지 않습니다. 또한 중간 파일을 삭제하지 않습니다. Models라이브러리 프로젝트 에서 일부 코드를 수정하면 BUILD 솔루션입니다. 아래 스크린 샷에서 DLL의 타임 스탬프, EXE 업데이트 ModelsNotification라이브러리를 참조하십시오.

여기에 이미지 설명을 입력하십시오

  • 솔루션 다시 빌드 이전에 수행 한 작업을 무시하고 모든 컴파일 된 파일을 삭제하고 변경 사항에 관계없이 모든 파일을 컴파일합니다. 솔루션 이름을 마우스 오른쪽 단추로 클릭하십시오 BuildRebuildClean. 그것이하는 일은 모든 어셈블리, EXE 및 참조 파일을 삭제하여 다시 컴파일하는 것입니다.

여기에 이미지 설명을 입력하십시오

  • 클린 솔루션 bin / obj 디렉토리에서 컴파일 된 중간 파일 (예 : EXE 및 DLL)을 모두 삭제합니다.

여기에 이미지 설명을 입력하십시오


2

내가 아는 전부는 Clean이 "clean clean"에 사용 된 작업을 수행하지 않는다는 것입니다. 솔루션을 청소하면 obj와 bin 파일 / 폴더가 삭제되어 소스가 새로 생성 된 것처럼 보일 것입니다. 필자의 경험에 따르면 정리 및 빌드 또는 재구성 이 컴파일알려진 소스에서 여전히 이상한 오류를 생성 하고 bin / obj 폴더를 수동으로 삭제하는 것이 필요한 경우가 종종 있습니다.


특히 Xamarin 프로젝트에서 이상한 컴파일 오류를 해결하기 위해 수동으로 bin 및 obj 폴더를 삭제해야합니다.
Miguel Febres


0

이것은 "빌드 솔루션"옵션에만 해당됩니다.

솔루션을 실제로 정리할 수없는 Visual Studio의 무능에 완전히 푹 빠져서이 작은 도구 를 작성 했습니다.

VS에서 솔루션을 먼저 닫고 폴더를 Windows 탐색기에서이 앱 또는 아이콘으로 드래그하십시오. 창 하단의 설정에 따라 추가 항목을 제거 할 수도 있습니다. 솔루션을 GitHub에 수동으로 업로드하거나 다른 사람과 공유하려는 경우 도움이됩니다.

여기에 이미지 설명을 입력하십시오

간단히 말해 VS에서 휴지통으로 다시 작성할 수있는 모든 "디버그"폴더, Intellisense 및 기타 캐시를 배치합니다.

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