Visual Studio 빌드 오류 - result: unexpected exception occured (-1002 - 0xfffffc16)
Fake가 포함된 단위 테스트 프로젝트 빌드 시 다음과 같은 오류가 발생합니다.
1>------ Build started: Project: TestLibUnitTest, Configuration: Debug Any CPU ------
1>Build started 2019-07-08 오전 11:52:39.
1>BuildFakesAssemblies:
1> Collecting outdated Fakes assemblies
1> fakes tools timestamp: 2019-03-26 07:31:33Z
1> reference assembly paths:
...[생략]...
1> framework assembly path: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\PublicAssemblies
1> output path: D:\TestPrj\FakesAssemblies
1> intermediate path: D:\TestPrj\obj\Debug\Fakes
1> Fakes: 4 (4 .fakes files)
1> Fakes\TestLib.fakes
1> Fakes\mscorlib.fakes
1> Fakes\System.fakes
1> Fakes\System.Web.fakes
1> fakes tool: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\Fakes\fakes.exe
1> command line arguments: /Properties:";PlatformTarget=x64" /msbuildpath:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe"
1> result: unexpected exception occured (-1002 - 0xfffffc16)
1> Fakes assemblies:
1> D:\TestPrj\FakesAssemblies\TestLib.Fakes.dll
1> D:\TestPrj\FakesAssemblies\TestLib.Fakes.fakesconfig
1> D:\TestPrj\FakesAssemblies\System.4.0.0.0.Fakes.dll
1> D:\TestPrj\FakesAssemblies\System.4.0.0.0.Fakes.fakesconfig
1> D:\TestPrj\FakesAssemblies\System.Web.4.0.0.0.Fakes.dll
1> D:\TestPrj\FakesAssemblies\System.Web.4.0.0.0.Fakes.fakesconfig
1> D:\TestPrj\FakesAssemblies\System.4.0.0.0.Fakes.messages
1> D:\TestPrj\FakesAssemblies\System.Web.4.0.0.0.Fakes.messages
1>
1>Build FAILED.
1> 0 Warning(s)
1> 0 Error(s)
1>
1>Time Elapsed 00:00:36.52
========== Build: 0 succeeded, 1 failed, 2 up-to-date, 0 skipped ==========
자세히 보면, fakes 파일이 4개인데,
1> Fakes: 4 (4 .fakes files)
1> Fakes\TestLib.fakes
1> Fakes\mscorlib.fakes
1> Fakes\System.fakes
1> Fakes\System.Web.fakes
생성된 Fakes.dll은 3개입니다.
1> D:\TestPrj\FakesAssemblies\TestLib.Fakes.dll
1> D:\TestPrj\FakesAssemblies\TestLib.Fakes.fakesconfig
1> D:\TestPrj\FakesAssemblies\System.4.0.0.0.Fakes.dll
1> D:\TestPrj\FakesAssemblies\System.4.0.0.0.Fakes.fakesconfig
1> D:\TestPrj\FakesAssemblies\System.Web.4.0.0.0.Fakes.dll
1> D:\TestPrj\FakesAssemblies\System.Web.4.0.0.0.Fakes.fakesconfig
1> D:\TestPrj\FakesAssemblies\System.4.0.0.0.Fakes.messages
1> D:\TestPrj\FakesAssemblies\System.Web.4.0.0.0.Fakes.messages
원인은, DLL을 생성하지 못했던 mscorlib.fakes 파일에 정의한 ShimGeneration과 StubGeneration의 순서에 있었습니다. 즉, 다음과 같은 순서인 경우에 "unexpected exception occured (-1002 - 0xfffffc16)" 오류가 발생했던 것으로,
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<ShimGeneration>
<Clear />
<Add FullName="System.AppDomain"/>
</ShimGeneration>
<StubGeneration>
<Remove Namespace="System.Security.Cryptography.X509Certificates"/>
</StubGeneration>
</Fakes>
이렇게 순서를 바꾸고 나서는 정상적으로 빌드가 되었습니다.
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<StubGeneration>
<Remove Namespace="System.Security.Cryptography.X509Certificates"/>
</StubGeneration>
<ShimGeneration>
<Clear />
<Add FullName="System.AppDomain"/>
</ShimGeneration>
</Fakes>
사실, Visual Studio 편집기 화면에서 StubGeneration을 뒤에 둔 경우 빨간색 밑줄이 그어져 오류임을 알리고 있었는데 그걸 무시하고 빌드하는 바람에 발생한 오류였습니다.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]