Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Visual Studio 2019 Preview의 닷넷 프로젝트 빌드가 20초 이상 걸리는 경우

2019 Preview에서 기본 생성한 닷넷 프로젝트인데 빌드가 너무 느립니다. (대략 20초 이상 걸립니다.) 반면 동일한 프로젝트를 2017로 로드해 빌드하면 바로 끝납니다. 빌드 로그를 자세하게 남도록 설정하고 결과를 보니 CoreCompile에서 오래 걸립니다.

1>Target Performance Summary:
1>        0 ms  SetWin32ManifestProperties                 1 calls
...[생략]...
1>       39 ms  _GetProjectReferenceTargetFrameworkProperties   2 calls
1>    20785 ms  CoreCompile                                1 calls

프로세스로 보면 csc에서 걸린다고 하는데요.

1>Task Performance Summary:
1>        0 ms  Message                                    3 calls
1>        0 ms  ReadLinesFromFile                          1 calls
...[생략]...
1>       65 ms  MSBuild                                    5 calls
1>    20785 ms  Csc                                        1 calls

재미있는 것은, 해당 csc.exe를 명령행에서 수행하면 곧바로 끝납니다.

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\15.0\Bin\Roslyn\csc.exe" /noconfig /nowarn:1701,1702 /nostdlib+ /platform:AnyCPU /errorreport:prompt /warn:4 /define:DEBUG;TRACE /highentropyva+ /reference:F:\ts\WindowsFormsApp1\ClassLibrary1\bin\Debug\ClassLibrary1.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Deployment.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Drawing.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Windows.Forms.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\WindowsFormsApp1.exe /ruleset:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Team Tools\Static Analysis Tools\\Rule Sets\MinimumRecommendedRules.ruleset" /subsystemversion:6.00 /resource:obj\Debug\WindowsFormsApp1.Form1.resources /resource:obj\Debug\WindowsFormsApp1.Properties.Resources.resources /target:winexe /utf8output /deterministic+ Form1.cs Form1.Designer.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs "C:\Users\TestUser\AppData\Local\Temp\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"

그런데, 마찬가지로 (2019 Preview 용) 명령행에서 "msbuild WindowsFormsApp1.csproj"로 빌드하면 또 오래 걸립니다. 자세히 보니 msbuild와 csc 직접 실행 간의 차이점이 있는데 msbuild인 경우에만 csc 실행 단계에서 다음의 로그가 보입니다.

Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\15.0\Bin\Roslyn

검색해 보면, "shared compilation"이란 로컬 상에서 별도의 빌드 프로세스인 VBCSCompiler가 빌드를 담당하는 거라고 합니다.

What means the “Using shared compilation with compiler from directory ..” message and what's shared compilation?
; https://stackoverflow.com/questions/47590068/what-means-the-using-shared-compilation-with-compiler-from-directory-messag

사용 여부를 옵션으로 조정할 수 있는데, csproj 파일에서 다음과 같이 설정하면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
...[생략]...
    <UseRazorBuildServer>false</UseRazorBuildServer>
    <UseSharedCompilation>false</UseSharedCompilation>
  </PropertyGroup>
...[생략]...

다행히, 이후로는 빌드가 정상적인 속도로 바로 끝납니다.




그러니까 문제는, 아마도 VBCSCompiler.exe 프로세스를 실행하는데 뭔가 시간이 걸리고 있다는 것입니다. 게다가 빌드를 하면 이 프로세스가 종료되기 때문에 매번 Visual Studio 2019 Preview로 빌드할 때마다 시간이 걸립니다.

그렇다면, 아예 VBCSCompiler.exe를 실행시켜 두면 어떨까요? 이를 위해 다음의 경로에 있는 파일을,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\15.0\Bin\Roslyn\VBCSCompiler.exe

직접 실행해 두고, Visual Studio 2019 Preview에서 빌드했더니 이번에는 예상대로 UseSharedCompilation 옵션에 상관없이 빌드가 항상 빠르게 완료됩니다.

일단, 정식 버전이 나올 때까지(또는, 패치될 때까지) 이렇게 써야겠습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 2/20/2019]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-02-25 11시34분
vbcscompiler.exe 파일이 일정 시간 동안 빌드할 일이 없으면 자동으로 내려갑니다. 이를 방지하려면 VBCSCompiler.exe.config 파일을 열어 다음의 설정 값을 적절하게 바꿔주면 됩니다.

<add key="keepalive" value="600" />
정성태
2019-03-06 11시27분
Preview 3에서 발생한 문제로 현재 Preview 4/RC부터는 해당 현상이 발생하지 않고 있습니다.
정성태

... 151  152  153  154  155  156  157  158  [159]  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1073정성태6/20/201127149오류 유형: 127. Visual Studio에서 WCF 서비스의 이름 변경 시 발생할 수 있는 오류
1072정성태6/19/201126619.NET Framework: 224. EF 4.1 Code First에서 Identity 칼럼 생성하는 방법파일 다운로드1
1071정성태6/19/201130152.NET Framework: 223. Entity Framework 4.1의 Code First를 이용한 SQL Azure 데이터베이스 생성 [3]파일 다운로드1
1070정성태6/19/201127682.NET Framework: 222. Windows Azure - VM Role 베타 프로그램 참여 [2]
1069정성태6/18/201127765.NET Framework: 221. Cache 영향을 받지 않는 DNS 이름 풀이 [2]파일 다운로드1
1068정성태6/16/201125375개발 환경 구성: 127. Portable Library - 닷넷 N-Screen용 공통 라이브러리 제작 [1]
1067정성태6/15/201124939오류 유형: 126. Windows failed to apply the Group Policy Folder Options settings. [1]
1066정성태6/14/201127953개발 환경 구성: 126. MSDN 구독자 - Windows Azure 무료 서비스 신청하는 방법 [4]
1065정성태6/13/201132779개발 환경 구성: 125. Firebird - 유니코드 기본 문자셋 지정
1064정성태6/11/201127437웹: 22. Visual Studio 2010에서 CSS 3 인텔리센스(intellisense) 지원하는 방법 [1]
1063정성태6/10/201129035웹: 21. Sysnet 웹 사이트의 CSS 2.1 변환 기록 [1]
1062정성태6/9/201129193웹: 20. Sysnet 웹 사이트의 HTML5 변환 기록 [1]
1061정성태6/8/201127432오류 유형: 125. 인터넷 익스플로러 - 개발자 도구에서 정지점(BP: Breakpoint) 설정이 안 되는 경우 [1]
1060정성태6/8/201124002VC++: 51. PHP 모듈의 F5 디버깅
1059정성태6/6/201129121VC++: 50. PHP 모듈 - php_mysql 빌드하는 방법파일 다운로드1
1058정성태6/5/201132777개발 환경 구성: 124. .NET 개발자가 처음 해보는 PHP + MySQL 연동 [2]
1057정성태6/4/201130149VC++: 49. 소스 코드로부터 php5apache2_2.dll 생성하는 방법파일 다운로드1
1056정성태6/2/201128309VC++: 48. 윈도우에서 Apache Module - Content Handler 컴파일파일 다운로드1
1055정성태6/1/201125526오류 유형: 124. MVC 프로젝트의 Site.Master 관련 오류 정리
1054정성태5/31/201129762.NET Framework: 220. ASP.NET MVC Web Site 프로젝트 - 단위 테스트 작성파일 다운로드1
1053정성태5/31/201132306VC++: 47. Apache Module에 대한 'F5 디버그 (Start with debugging)' [2]
1052정성태5/30/201129929.NET Framework: 219. ASP.NET MVC Web Site 프로젝트 구성하기파일 다운로드1
1051정성태5/28/201138417VC++: 46. 윈도우에서 Apache Module 컴파일 (VC++)파일 다운로드1
1050정성태5/28/201124601오류 유형: 123. Firebird - Exception of type 'FirebirdSql.Data.Common.IscException' was thrown.
1049정성태5/28/201130285.NET Framework: 218. WCF REST 서비스 - 웹 브라우저 측 Ajax 호출 캐시 [1]
1048정성태5/27/201132224개발 환경 구성: 123. Apache 소스를 윈도우 환경에서 빌드하기
... 151  152  153  154  155  156  157  158  [159]  160  161  162  163  164  165  ...