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)
10831정성태8/13/201531497.NET Framework: 524. .NET 4.0과 .NET 4.5의 컴파일 결과 차이점 [1]파일 다운로드1
10830정성태8/12/201525488개발 환경 구성: 275. Web.config이 적용되지 않는 프로젝트에서 Razor 템플릿 파일의 C# 컴파일러 버전 제어 [1]
10829정성태8/10/201527624개발 환경 구성: 274. PowerShell/명령행에서 JDK/JRE를 무인(unattended)/자동 설치를 하는 방법 [3]
10828정성태8/10/201533105웹: 30. Edge 브라우저에서 "이 웹 사이트에는 Internet Explorer가 필요함" 단계를 없애는 방법 [1]
10827정성태7/8/201533893개발 환경 구성: 273. Visual Studio 2015에서 Github와 연동하는 방법 [3]
10826정성태7/8/201524246오류 유형: 301. The trust relationship between this workstation and the primary domain failed. - 두 번째 이야기
10825정성태7/8/201522947개발 환경 구성: 272. Visual Studio IDE 설치 없이 Visual Studio SDK 설치하는 방법
10824정성태7/7/201528566개발 환경 구성: 271. Team Foundation Server 2015 설치 방법 [1]
10823정성태7/7/201529338오류 유형: 300. SqlException (0x80131904): Unable to open the physical file
10822정성태7/7/201528147오류 유형: 299. The 'Visual C++ Project System Package' package did not load correctly.
10821정성태7/7/201521211오류 유형: 298. Unable to start debugging on the web server. IIS does not list a web site that matches the launched URL.
10820정성태7/7/201526945오류 유형: 297. HTTP Error 503. The service is unavailable. - 두 번째
10819정성태7/2/201530089오류 유형: 296. SQL Server Express 시작 오류 - error code 3417
10818정성태7/1/201529265오류 유형: 295. HTTP Error 503. The service is unavailable. [1]
10817정성태6/29/201533224.NET Framework: 523. C# 람다(Lambda)에서 변수 캡처 방식 [3]
10816정성태6/25/201529001.NET Framework: 522. 닷넷의 어셈블리 서명 데이터 확인 방법파일 다운로드1
10815정성태6/23/201527436Graphics: 1. 자네 나와 함께... UNITY 하지 않겠는가! [4]
10814정성태6/22/201525184.NET Framework: 521. Roslyn을 이용해 C# 문법 변형하기 (2) [5]
10813정성태6/21/201526272.NET Framework: 520. Roslyn을 이용해 C# 문법 변형하기 (1)
10812정성태6/20/201527164.NET Framework: 519. C# 6.0 오픈 소스 컴파일러 Roslyn - 빌드 및 테스트 방법 [1]
10811정성태6/20/201524257오류 유형: 294. OpenAuth 사용 시 System.Data.SqlClient.SqlException 예외가 Output 창에 출력되는 문제
10810정성태6/18/201523751개발 환경 구성: 270. Visual Studio에서 github 오픈 소스를 fork해서 테스트하는 방법 [1]
10809정성태6/18/201521489.NET Framework: 518. AllowPartiallyTrustedCallers 특성이 적용된 GAC 어셈블리에서 DynamicMethod의 calli 명령어 사용파일 다운로드1
10808정성태6/17/201523538.NET Framework: 517. calli IL 호출이 DllImport 호출보다 빠를까요? [1]파일 다운로드1
10807정성태6/16/201524995.NET Framework: 516. Microsoft.AspNet.Membership.OpenAuth 사용 시 "Local Database Runtime error occurred" 오류
10806정성태6/16/201542354.NET Framework: 515. OpenAuth.VerifyAuthentication 호출 시 The remote server returned an error: (400) Bad Request
... 121  122  123  124  [125]  126  127  128  129  130  131  132  133  134  135  ...