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부터는 해당 현상이 발생하지 않고 있습니다.
정성태

... 121  122  123  [124]  125  126  127  128  129  130  131  132  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
10822정성태7/7/201527265오류 유형: 299. The 'Visual C++ Project System Package' package did not load correctly.
10821정성태7/7/201519525오류 유형: 298. Unable to start debugging on the web server. IIS does not list a web site that matches the launched URL.
10820정성태7/7/201525471오류 유형: 297. HTTP Error 503. The service is unavailable. - 두 번째
10819정성태7/2/201528927오류 유형: 296. SQL Server Express 시작 오류 - error code 3417
10818정성태7/1/201527738오류 유형: 295. HTTP Error 503. The service is unavailable. [1]
10817정성태6/29/201531438.NET Framework: 523. C# 람다(Lambda)에서 변수 캡처 방식 [3]
10816정성태6/25/201527781.NET Framework: 522. 닷넷의 어셈블리 서명 데이터 확인 방법파일 다운로드1
10815정성태6/23/201525613Graphics: 1. 자네 나와 함께... UNITY 하지 않겠는가! [4]
10814정성태6/22/201523375.NET Framework: 521. Roslyn을 이용해 C# 문법 변형하기 (2) [5]
10813정성태6/21/201525169.NET Framework: 520. Roslyn을 이용해 C# 문법 변형하기 (1)
10812정성태6/20/201526302.NET Framework: 519. C# 6.0 오픈 소스 컴파일러 Roslyn - 빌드 및 테스트 방법 [1]
10811정성태6/20/201523166오류 유형: 294. OpenAuth 사용 시 System.Data.SqlClient.SqlException 예외가 Output 창에 출력되는 문제
10810정성태6/18/201522148개발 환경 구성: 270. Visual Studio에서 github 오픈 소스를 fork해서 테스트하는 방법 [1]
10809정성태6/18/201520044.NET Framework: 518. AllowPartiallyTrustedCallers 특성이 적용된 GAC 어셈블리에서 DynamicMethod의 calli 명령어 사용파일 다운로드1
10808정성태6/17/201522440.NET Framework: 517. calli IL 호출이 DllImport 호출보다 빠를까요? [1]파일 다운로드1
10807정성태6/16/201523514.NET Framework: 516. Microsoft.AspNet.Membership.OpenAuth 사용 시 "Local Database Runtime error occurred" 오류
10806정성태6/16/201541392.NET Framework: 515. OpenAuth.VerifyAuthentication 호출 시 The remote server returned an error: (400) Bad Request
10805정성태6/15/201522673Java: 17. 자바의 재미있는 상수 처리 방식
10804정성태6/10/201522348.NET Framework: 514. .NET CLR2 보안 모델에서의 APTCA 역할 (2)파일 다운로드1
10803정성태6/2/201524269.NET Framework: 513. UWP(Universal Windows Platform) 응용 프로그램의 새로운 라이브러리 버전 관리 해법 [2]
10802정성태6/2/201524365개발 환경 구성: 269. 마이크로소프트 온라인 강좌 소개 - Azure VPN 구성 방법 [1]
10801정성태5/31/201528916.NET Framework: 512. async/await 사용 시 hang 문제가 발생하는 경우 - 두 번째 이야기 [3]
10800정성태5/29/201524363개발 환경 구성: 268. 소개 - 프로세싱(https://processing.org/)
10799정성태5/29/201522142사물인터넷: 3. 책 소개 - 라즈베리 파이로 구현하는 사물 인터넷 프로젝트 [1]
10798정성태5/26/201521864기타: 53. 2015년 6월 10일 밤 10시 온라인 세미나 - 새로운 Windows 10 App을 개발하는 방법
10797정성태5/23/201521542VC++: 91. 자식 스레드에 자동 상속되는 TEB의 SubProcessTag 필드파일 다운로드1
... 121  122  123  [124]  125  126  127  128  129  130  131  132  133  134  135  ...