Visual Studio에서 Rebuild와 Clean + Build의 차이점


답변:


308

재 구축 = 정리 + 빌드 (일반적으로)

주목할만한 세부 사항 :

  1. 다중 프로젝트 솔루션의 경우 "리빌드 솔루션"은 각 프로젝트에 대해 "정리"와 "빌드"를 수행합니다 (병렬로 가능). "깨끗한 솔루션"다음에 "빌드 솔루션"이 먼저 모든 프로젝트 (병렬로)를 정리 한 다음 모든 프로젝트 (병렬로)를 작성합니다. 이벤트 순서의 차이는 프로젝트 간 종속성이 발생할 때 중요해질 수 있습니다.

  2. 세 가지 동작 모두 MSBuild 대상에 해당합니다. 따라서 프로젝트는 재 빌드 조치를 대체하여 완전히 다른 작업을 수행 할 수 있습니다.


2
그래서 당신은 그 말을 다시 한다 정확하게 A와 같은 청소는 a로 다음 빌드 ? 그건 내가 생각한 것 같지만 확실하지 않았습니다.
Jim McKeeth

43
Rebuild를 제외하고 각 프로젝트를 하나씩 정리하고 다시 작성합니다. Clean + Build는 모든 항목을 정리 한 다음 모두 빌드합니다. 우연히 클릭하면 차이가납니다 :)
Eugene

25
그것들이 동일하다는 보장의 부족을 제외하고. Earl 's와 결합 된 JaredPar의 답변은 전체 그림입니다. Rebuild는 각 프로젝트를 차례로 수행하기 때문에 종속성 정보가 엉망이되고 이전 프로젝트 A를 사용하여 B의 빌드 순서가 잘못된 프로젝트를 얻은 다음 A를 다시 빌드 한 다음 C를 다시 빌드하면 "코너 사례"를 가질 수 있습니다. A 전체 솔루션 정리 다음에 전체 솔루션 빌드를 수행하면 재 구축되지 않지만이 상황이 발생합니다. 따라서 편집증과 피곤함이 많을수록 Clean and Build를 선호합니다.
Jason Harrison

14
사실이 아닙니다. Clean + Build가 성공한 프로젝트가 있었고 Rebuild가 컴파일 오류 (원형 파일 참조)를 반환했습니다. 따라서 그들은 100 % 동일하지 않습니다.
Yaakov Ellis

2
이 글이 바뀌었을 수도 있지만, 왜 Rebuild가 clean + build stackoverflow.com/questions/3095901/…
Dave

163

Earl은 Rebuild = Clean + Build 시간의 99 %에 해당합니다.

그러나 그것들이 동일하다는 보장은 없습니다. 3 가지 동작 (다시 빌드, 빌드, 정리)은 다른 MSBuild 대상을 나타냅니다. 각각은 프로젝트 파일로 재정 의하여 사용자 지정 작업을 수행 할 수 있습니다. 따라서 clean + build를 시작하기 전에 여러 작업을 수행하여 rebuild를 재정의하거나 완전히 제거하는 것이 전적으로 가능합니다.

코너링 사례는 많지만 의견 토론으로 인해 지적되었습니다.


.dll 파일을 새 위치로 옮기는 빌드 동작을 추가하면 다시 빌드 만하면 '나쁜'빌드 결과를 얻을 수 있습니다. vb.net과 c # 프로젝트를 혼합하면 양식 디자이너가 손상되고 제대로 작동하지 않습니다.
CodingBarfield

+1 또한 리빌드 동작은 종속성과 관련하여 언어간에 일관성이없는 것으로 보입니다 : stackoverflow.com/questions/12163080/…
lesscode

1
시간의 99 %가 과대 평가되었습니다.
Rhyous

57

기본 Clean 및 Build 구현 측면에서 기본 Rebuild 구현을 정의 해 보겠습니다.

  1. 프로젝트 당 : 프로젝트 다시 빌드 = 프로젝트 정리 + 프로젝트 빌드.

  2. 솔루션 별 : sln 재구성 = sln의 각 프로젝트 (클린 프로젝트 + 빌드 프로젝트).

실행 순서의 차이로 인해 Rebuild sln은 (Clean sln + Build sln) = (sln Clean 프로젝트의 각 프로젝트) + (sln Build 프로젝트의 각 프로젝트)와 동일하지 않습니다. 또한이 "foreach"는 동시에 실행될 수 있으므로 두 시나리오에서 서로 다른 작업을 동시에 실행할 수 있습니다.

proj1, proj2 및 proj3을 포함하는 sln이 있다고 가정하십시오.

  • sln을 다시 빌드 = (Clean proj1 + Build proj1) & (Clean proj2 + Build proj2) & (Clean proj3 + Build proj3)

  • 클린 Sln + 빌드 Sln = (클린 proj1 및 클린 proj2 및 클린 proj3) + (빌드 proj1 및 빌드 proj2 및 빌드 proj3)

+는 직렬을 의미하고 &는 동시를 의미합니다.

따라서 프로젝트 종속성이 올바르게 구성되지 않은 경우 Rebuild sln을 실행할 때 일부 프로젝트가 오래된 라이브러리에 링크 될 수 있습니다. 첫 번째 빌드가 시작되기 전에 모든 청소가 완료되는 것은 아닙니다. Clean sln + Build sln을 실행하면 이상한 동작이있는 앱을 제공하는 대신 링크 오류가 발생하여 즉시 알려줍니다.


7
이것은 때로는 때로는 다시 만들 수는 없지만 정리하고 빌드 할 수 있었던 이유를 설명하기 때문에 가장 정확한 대답입니다.
Toan Nguyen

11

에서 http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm , (그냥 인터넷 검색)

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

솔루션 빌드 또는 재 구축은 솔루션의 모든 프로젝트를 빌드 또는 재 구축하는 반면, 빌드 또는 재 구축은 위의 스크린 샷에서 "hello"시작 프로젝트를 빌드 또는 재 구축합니다. 시작 프로젝트를 설정하려면 솔루션 탐색기 탭에서 원하는 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택하십시오. 이제 프로젝트 이름이 굵게 표시됩니다. 과제 솔루션에는 일반적으로 하나의 프로젝트 만 있기 때문에 빌드 또는 재구성 솔루션은 사실상 빌드 또는 재구성과 동일합니다.

컴파일은 현재 편집중인 소스 파일을 컴파일합니다. 나머지 소스 파일이 전체 프로젝트를 성공적으로 빌드하지 못하게하는 불완전한 상태 일 때 오류를 신속하게 확인하는 데 유용합니다. Ctrl-F7은 컴파일의 단축키입니다.


Toan Nguyen과 마찬가지로, 때때로 Clean + Build Solution이 프로젝트 간 종속성으로 인해 Rebuild Solution이 실패하는 경우 성공하기 때문에이 답변은 적어도 2018 년에 오해의 소지가 있습니다.
Jon Coombs

4

에서 이 블로그 게시물 저자로 연결 이 질문에 대한 코멘트 :

실제로 아니요 !!! 그들은 평등하지 않습니다.

차이점은 프로젝트가 깨끗하고 구축되는 순서입니다. 솔루션에 두 개의 프로젝트가 있다고 가정 해 봅시다. 정리 후 빌드는 두 프로젝트 모두에서 정리를 수행 한 다음 다시 빌드하는 동안 빌드 A가 개별적으로 발생합니다. 프로젝트 A는 정리 및 빌드 한 후 빌드 B가 정리 된 후 빌드됩니다.

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