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

... 181  182  183  184  185  [186]  187  188  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
325정성태9/8/200627316    답변글 디버깅 기술: 5.12. CCP를 이용한 Windows Source Code 수준의 디버깅
329정성태8/19/200626349    답변글 디버깅 기술: 5.13. 소스 서버 구성 [1]
332정성태8/20/200627815    답변글 디버깅 기술: 5.14. GAC 에 등록된 Assembly 디버그 [2]
341정성태9/16/200620166    답변글 디버깅 기술: 5.15. [내용 예약]
342정성태9/16/200637713    답변글 디버깅 기술: 5.16. ASP.NET 디버깅 환경 구성 [1]파일 다운로드1
306정성태2/13/200717239기타: 15. .NET 이 생산성이 높다는 증거(!)
304정성태7/21/200619168VS.NET IDE: 41. 하위 폴더의 모든 프로젝트의 출력물을 제거 (Clean)
305정성태7/21/200618843    답변글 VS.NET IDE: 41.1. 하위 폴더의 모든 프로젝트의 출력물을 제거 (Clean) [1]
303정성태7/20/200616886Team Foundation Server: 12. 사용자 계정 재생성에 따른 Version Control 영향
302정성태8/21/200618444Team Foundation Server: 11. TFS Team Build와 VC++ Project 설정
299정성태7/23/200618897개발 환경 구성: 5. VMWare - VM 생성 화면 캡쳐
300정성태7/15/200623305    답변글 개발 환경 구성: 5.1. VMWare 오류 유형 - The handle is invalid.
301정성태7/18/200618307    답변글 개발 환경 구성: 5.2. VMWare - 사용 후기.
298정성태7/14/200618702개발 환경 구성: 4. VMWare Server를 64bit 운영체제에 설치 시 주의 사항 [2]
296정성태7/10/200627998.NET Framework: 73. [ASP.NET] HTC(DHTML Control Behavior)를 WebResource.axd로 제공하는 방법 [3]
295정성태7/1/200621211VC++: 25. Microsoft National Language Support Downlevel APIs 1.0 사용 방법파일 다운로드1
294정성태6/30/200617762.NET Framework: 72. XSDObjectGen.EXE 기능 개선
293정성태6/29/200619509Team Foundation Server: 10. TFS 버전 컨트롤(TFVC)에 참여시킨 프로젝트의 로컬 경로를 옮기는 방법
290정성태6/26/200616860Team Foundation Server: 9. HTTPS를 통한 Team Server 접근 - 두 번째 이야기 [1]
291정성태6/26/200618185    답변글 Team Foundation Server: 9.1. [선행 작업] HTTPS 를 통한 Team Server 접근 - 두번째 이야기 [1]
292정성태6/26/200617930    답변글 Team Foundation Server: 9.2. TF30177 오류 발생
307정성태8/3/200619588    답변글 Team Foundation Server: 9.3. Team Server 접근 이름을 바꾸는 방법 [1]파일 다운로드1
308정성태2/18/200719237        답변글 Team Foundation Server: 9.4. Team Server HTTPS 접근 완료. ^^ [1]
288정성태6/26/200634121오류 유형: 10. error MSB6006: "aspnet_merge.exe" exited with code 1
286정성태6/23/200622241웹: 4. 웹 사이트 식별자(Identifier) 값 변경
285정성태6/20/200622532오류 유형: 9. [TFS] Report 관련 서비스를 조회할 때 rsErrorImpersonatingUser 오류 메시지 발생 [1]
... 181  182  183  184  185  [186]  187  188  189  190  191  192  193  194  195  ...