2014-11-05 5 views
5

저는 subprocess를 호출하여 Python을 통해 Visual Studio 2010 솔루션을 구축하고 있습니다. 명령 행에서 직접 호출하면 devenv.com ~ 15 초가 걸립니다. 그러나 Python에서 호출하면 최대 1.5 분이 소요됩니다.MSBuild.exe로 증분 빌드

당연히 나는 우리가 지은 시간에서 그 죽은 시간을 제거하기를 희망하고 있습니다. 그래서 MSBuild.exe (.NET 4)를 테스트하기로 결정했습니다. MSBuild.exe가 즉시 실행되는 것 같습니다. 그러나 ... 그것은 증분이 아닌 매회 완전한 빌드를하는 것처럼 보입니다.

내가 사용 명령이 증분 빌드를 지원해야 것 같다

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" "C:\path\to\my\project.sln" /target:build /maxcpucount:8 /property:Configuration=Release 

입니다. 그러나 msbuild가 이와 같은 증분 빌드를 지원하지 못할 수 있음을 나타내는 온라인 게시물을 보았습니다.

이것이 가능합니까? 그렇다면 내가 뭘 잘못하고 있니?

업데이트 :

이 내용을 읽었습니다. 내 .vcxproj 파일에 설정된 입력 및 출력 특성이 필요한 것처럼

http://msdn.microsoft.com/en-us/library/ms171483.aspx

http://www.digitallycreated.net/Blog/67/incremental-builds-in-msbuild-and-how-to-avoid-breaking-them

을 바탕으로 보인다. 내 파일을 체크 아웃 이러한 실제로 없습니다.

언제 생성 되나요? 대부분의 .vcxproj 파일은 Visual Studio 2008에서 변환되었습니다. 그러나 입력 및 출력 속성도 누락 된 새 프로젝트가 생성되었습니다.

VS2010에서 이러한 속성을 가진 프로젝트를 만들지 못합니까?

업데이트 : VS 2013으로 업그레이드 한 이후로 이제는 msbuild가 증분 빌드를 지원합니다. VS 2010 문제의 맨 아래에 도달하지 마십시오.

+1

MSBuild가 증분 빌드를 지원하지 않는다는 정보를 어디에서 보았습니까? URL이나 포인터를 게시하는 방법을 게시 할 수 있습니까? –

+0

이것은 내가 찾은 게시물입니다. https://social.msdn.microsoft.com/Forums/vstudio/en-US/8123dce6-7177-4fd7-b59c-51ef1359e60d/msbuild-task-is-not-incremental. 점진적 빌드가 지원되지 않는다고 생각하게 만든 점은 "MsBuild를 시스템으로 사용하거나 MSBuild를 작업으로 사용하면 .sln이 빌드되는 것과 관련된 입력 및 출력을 알 수있는 방법을 제공하지 않습니다." 그러나이 진술이 얼마나 정확한지 나는 분명하지 않다. 그러므로이 질문. –

답변

2

나는 증분은 지원되지 않습니다 빌드 있다는 사실이 공식 소스, Managed Incremental Build이 기능에 따라에서 허위 진술이라고 생각하고 VS2010 SP1

에 포함 된 우리가 먼저 VS2008에서 관리되는 증분 빌드 기능을 소개했다. VS2010에서 빌드 된 시스템이 MSBuild로 이동하면서 관리되는 증분 빌드 기능을 다시 구현할 수 없었습니다. 이 기능에 대한 고객의 요청이 입니다. 따라서 은이 기능을 다시 구현했으며 VS2010 SP1에 포함되어 있습니다.

다른 솔루션은 내가 (당신이 빌드 대신 다시 않도록해야합니다)

  • 프로젝트가 이미 점진적으로 구축해야 웹에 발견했다. 증분 건물이 작동하는지 확인하는 가장 좋은 방법은 명령 줄에서 빌드를 실행하는 것입니다. 두번째로 시간은 거의 시간을 들이지 않아야합니다.

    아직 상황이 재구성되는 경우 빌드 순서가 엉망인 어떤 방식 으로든 프로젝트를 수정했을 수 있습니다. 빌드 로그를 보면 (/ v 옵션을 통해) 무슨 일이 벌어지는 지 알 수 있습니다.

  • 증분 빌드에 문제가 발생할 수있는 다른 이유는 GenerateResource.TrackFileAccess Property입니다.이 API는 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없습니다. 파일 액세스 패턴을 추적해야하는지 여부를 지정하는 스위치를 가져 오거나 설정합니다.
+1

Ahhhh .... 그건 의미가 있습니다. 나는 Service Pack 1을 가지고 있지 않았다. 초기 릴리스에서 벗어나는 특별한 기능. –

+0

@ShaneGannon이 동의했습니다 :)! –