성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Windows 10에서 Fake 어셈블리를 생성하는 경우 빌드 시 The type or namespace name '...' does not exist in the namespace 컴파일 오류 발생</h1> <p> Visual Studio 2015의 경우, .NET 3.5 프로젝트에 대해 단위 테스트를 생성하면 기본적으로 .NET 4.6 대상의 테스트 프로젝트가 생성됩니다. 그런데, 그렇게 지정된 테스트 프로젝트의 System.dll에 대한 Fake 어셈블리를 생성하는 경우 빌드 시 다음과 같은 오류가 발생할 수 있습니다. (System.dll에 대해 Fake를 생성하면 그것이 참조하고 있는 mscorlib.dll에 대해서도 Fake 어셈블리가 생성됩니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Severity Code Description Project File Line Suppression State Error CS0234 The type or namespace name 'EventSourceCreatedEventArgs' does not exist in the namespace 'System.Diagnostics.Tracing' (are you missing an assembly reference?) [C:\ConsoleApplication1Tests\obj\Debug\Fakes\m\f.csproj] ConsoleApplication1Tests C:\ConsoleApplication1Tests\f.cs 18545 Active </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Severity Code Description Project File Line Suppression State Error CS0115 'StubDSA.VerifyData(Stream, byte[], HashAlgorithmName)': no suitable method found to override [C:\ConsoleApplication1Tests\obj\Debug\Fakes\m\f.csproj] ConsoleApplication1Tests C:\ConsoleApplication1Tests\f.cs 177476 Active </pre> <br /> 왜냐하면, EventSourceCreatedEventArgs 타입과 DSA.VerifyData 메서드는 모두,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > EventSourceCreatedEventArgs Class ; <a target='tab' href='https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.tracing.eventsourcecreatedeventargs'>https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.tracing.eventsourcecreatedeventargs</a> DSA.VerifyData Method (Byte[],?Byte[],?HashAlgorithmName) ; <a target='tab' href='https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.dsa.verifydata'>https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.dsa.verifydata</a> </pre> <br /> .NET 4.6.2부터 제공되는 것으로 .NET 4.6에는 없기 때문입니다. 결과적으로 보면 이건 Visual Studio의 버그로 보입니다. .NET 4.6 프로젝트가 참조하고 있는 mscorlib.dll에 대해 Fake 어셈블리를 생성할 때 기본적으로 .NET 4.6.2 버전의 mscorlib.dll을 기준으로 Fake 어셈블리를 생성하는 것이기 때문입니다.<br /> <br /> 즉, 이 현상은 .NET 4.6.2가 설치된 컴퓨터에 한해서 발생합니다.<br /> <br /> 해결 방법은, 문제가 되는 대상 타입들을 Fake 어셈블리에서 제외하도록 하는 것입니다. 예전에도 이에 대한 제어 방법을 한 번 설명했었는데요. ^^ <br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Visual Studio 빌드 오류 - error CS0122: '__ComObject' is inaccessible due to its protection level ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11039'>http://www.sysnet.pe.kr/2/0/11039</a> </pre> <br /> 따라서, "mscorlib.fakes" 파일에 다음과 같이 Remove 태그를 추가해 주면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"> <Assembly Name="mscorlib" Version="4.0.0.0"/> <span style='color: blue; font-weight: bold'> <StubGeneration> <Remove TypeName="EventSourceCreatedEventArgs"/> <Remove FullName="System.Security.Cryptography.DSA"/> <Remove FullName="System.Diagnostics.Tracing.EventListener"/> </StubGeneration></span> </Fakes> </pre> <br /> (TypeName은 클래스 이름만 지정해 주면 되는 반면, FullName은 Namespace까지 모두 포함해 지정해야 합니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, 설치된 닷넷 프레임워크의 버전을 확인하는 방법은 다음의 글에 자세히 나와 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > How to: Determine Which .NET Framework Versions Are Installed ; <a target='tab' href='https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed'>https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed</a> </pre> <br /> Windows 10의 경우, "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" 경로에서 "Release" 값이 "394802"로 되어 있을 텐데 이는 .NET 4.6.2가 설치되었다는 의미입니다. (Windows 10 Anniversary 업데이트 이후 설치됩니다.) 다른 운영체제의 경우, 다음의 경로에서 4.6.2를 다운로드 할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Microsoft .NET Framework 4.6.2 (Offline Installer) for Windows 7 SP1, Windows 8.1, Windows Server 2008 R2 SP1, Windows Server 2012 and Windows Server 2012 R2 ; <a target='tab' href='https://www.microsoft.com/en-us/download/details.aspx?id=53344'>https://www.microsoft.com/en-us/download/details.aspx?id=53344</a> </pre> <br /> 이렇게 설치된 경우 Release 값은 "394806"입니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2065
(왼쪽의 숫자를 입력해야 합니다.)