2010-08-02 3 views
1

msbuild 또는 다른 방법을 사용하여 현재 빌드에서 변경된 프로젝트를 감지하고 해당 프로젝트의 AssemblyInfo.cs에서 FileAssemblyVersion 특성을 업데이트하는 방법이 있습니까?변경 사항이있는 프로젝트 만 FileAssemblyVersion을 가져 오는 MSBuild 작업

+0

당신의 질문은 매우 리가 있습니다. MSBuild와 관련하여, 실제로 묻는 것은 "소스 컨트롤 서버에 완전히 의존하는"일정 기간의 변경 집합을 프로그래밍 방식으로 식별하는 방법 "입니다. 따라서 원하는 소스 제어 시스템을 모른 채 아무도이를 응답 할 수 없습니다 이 정보를 쿼리합니다. –

+0

TFS 2008을 사용 중입니다. 하늘에 떠있는 파이가 다음 줄에 표시됩니다. sln의 컴파일을 수행하는 대상을 호출하기 전에 파일이있는 프로젝트의 FileAssemblyVersion을 업데이트하는 MSBuild 사용자 지정 작업을 호출합니다 변경되어 현재 빌드를 트리거합니다. 분명히, 우리는 여기서 지속적인 통합 설정에 대해 이야기하고 있습니다. –

답변

0

증분 [get 및] 컴파일을 설정했다면 다음 단계는 MSBuild 시퀀스에 연결하는 것입니다. FrameworkDir\Microsoft.Common.Targets을 살펴보십시오. 문제는 일들이 이런 방식으로 작동하도록 설정되어 있지 않다는 것입니다. 즉, _TimestampBeforeCompile_TimeStampAfterCompile 단계가 있다는 것입니다. 이는 단지 뭔가가 컴파일 될 때 선험적으로 결정할 수 없다는 것을 보여줍니다. 이론적으로 [언어 관련] CoreCompile [예 : Microsoft.CSharp.targets]에서 문제가 될 수 있지만 문제는 해당 코드가 실행될 것인지를 결정할 때와 동일하게 Inputs이 필요하다는 것입니다. 잘라내어 붙여 넣기를 많이하고 시스템 파일과 동기화를 유지해야합니다. 다른주의 사항은 _ComputeNonExistentFileProperty 표적의 맨 위에있는 주석에 기록되어 있습니다.

그래서 시퀀스의 일부를 아주 깊이 수정하지 않고 (예 : 사용자가 _TimeStampAfterCompile의 컴파일이 감지되면 두 번째 컴파일을 강제 실행하는 '게시 빌드'비트에 후크하기. 쉽지는 않지만 권장되거나 지원되는 방법이 없습니다.

AssemblyFileVersion (당신은 FileAssemblyVersion을 참조하십시오.)은 단지 자원으로 컴파일 한 후 수정하기 쉽습니다. . 그러나 나는 당신이 정말로 그것과 동일한 방법으로 사실 후에 비틀 수없는 AssemblyVersion 모두를하는 것에 대해 이야기하고 있다고 가정합니다.

관련 문제