2009-05-19 4 views
0

우선 Visual Studio에서 기본 * .proj 파일을 사용하여 컴파일 할 때 기본 가정을 사용합니다. 동일한 솔루션을 두 번 연속 빌드하면 변경 사항이 없음을 감지하고 솔루션 빌드를 통해 진행되는 것처럼 보입니다. 이것은 프로젝트에서 변경된 것이 없으며 새로운 DLL 출력을 만들 필요가 없다는 것을 의미합니까?프로젝트를 다시 컴파일해야하는지 MSBuild에서 알고 있습니까?

그렇다면 질문이 있습니다. 여러 클래스 라이브러리가있는 솔루션과 각 프로젝트에서 AssemblyInfo.cs를 수정하여 빌드 버전을 자동으로 증가시키는 MSBuild 작업이 있다고 가정 해보십시오. 문제는 (이전의 가정이 맞다면) 매번이 작업을 수행하고 각 클래스 라이브러리를 새로 빌드합니다. MSBuild에서 프로젝트 재 컴파일이 필요한지를 알 수있는 대상 또는 속성이 있습니까? 그렇다면 버전 화 단계를 건너 뜁니 다.

나는 프로젝트 A를 업데이트하지만 솔루션 B에서는 프로젝트를 업데이트하지 않기 때문에 묻습니다. 솔루션에서 빌드를 실행하면 프로젝트 A의 버전을 업데이트하고 싶지만 프로젝트 B는 변경되지 않았으므로 혼자두고 싶습니다.

답변

1

찾을 뭔가 : http://msdn.microsoft.com/en-us/library/ms171483.aspx

MSBuild에서이 출력 파일의 타임 스탬프와 함께 입력 파일의 타임 스탬프를 비교하고 가 목표를 다시 부분적으로 건너 구축, 또는 여부를 결정할 수 있습니다. 다음 예제에서 @ (CSFile) 항목 컬렉션에있는 파일이 hello.exe 파일보다 최신 인 경우 MSBuild가 대상을 실행합니다. 은 그렇지 않으면 건너 뜁니다 :

<Csc 
    Sources="@(CSFile)" 
    OutputAssembly="hello.exe"/> </Target> 

을 ... 일이. 그런 다음 누군가가 어셈블리없이 소스 제어에서 코드를 끌어 내면 어떻게 될지 생각해 보았습니다 (이것이 우리가하는 방식입니다). 비교할 출력이 없으므로 어쨌든 컴파일을 수행하고 버전을 증가시킵니다. 복잡성으로 인해이 접근 방식을 포기하게 될 수도 있습니다.

1

개발자 상자를 늘리면 별 문제가되지 않습니다. 중요한 것은 매일/CI 빌드가 필요할 때만 증가한다는 것입니다. 그래서 제가 과거에 한 일은 다음 빌드 번호를 포함하는 작은 XML 파일을 가지고 있으며 MSBuild 작업에서이 xml 파일을 가져 와서 Version.cs라는 파일을 만듭니다 (일반적으로 AssemblyInfo.cs).

Version.cs는 사용자가 만든 soure control에 체크 된 적이 없으며 빌드에 의해 생성됩니다.

개발자는 현재 XML 파일을 동기화하고 바이너리를 빌드하고 현재 버전 번호를 가져옵니다. 지속적인 통합 구축 또한 동일한 일을 할 수 있습니다. 그러나 매일/공식 빌드는 XML 파일을 체크 아웃하고 버전 정보를 증가시킨 다음 체크인합니다. 그 순간부터 버전 번호가 공식적으로 변경되었습니다.

이 주제에는 여러 가지가 있지만 일반적인 아이디어는 작동합니다.

관련 문제