성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
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'>Fakes를 포함한 단위 테스트 프로젝트를 빌드 시 CS0619 관련 오류 발생</h1> <p> Fakes를 사용한 단위 테스트 프로젝트가,<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의 단위 테스트 작성 시 Fakes를 이용한 메서드 재정의 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/10858'>http://www.sysnet.pe.kr/2/0/10858</a> </pre> <br /> 어느 순간부터 다음과 같은 빌드 오류가 발생합니다. (빌드가 안되었으므로 당연히 해당 프로젝트에 대한 테스트 목록은 "Test Explorer"에서 제거됩니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Error CS0619 'SocketClientAccessPolicyProtocol' is obsolete: 'This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.' </pre> <br /> 오류를 보면 SocketClientAccessPolicyProtocol을 obsolete되었다고 하는데 실제로 다음의 문서에서 그 기록을 확인할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .NET Framework에서 사용되지 않는 멤버 ; <a target='tab' href='https://docs.microsoft.com/en-us/dotnet/framework/whats-new/obsolete-members'>https://docs.microsoft.com/en-us/dotnet/framework/whats-new/obsolete-members</a> </pre> <br /> 그러고 보니, 원래 이 단위 테스트 프로젝트는 빌드가 잘 되던 것인데 지난번 문제로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Error CS0234 The type or namespace name 'ITuple' does not exist in the namespace ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11438'>http://www.sysnet.pe.kr/2/0/11438</a> </pre> <br /> .NET 4.0 단위 테스트 프로젝트를 .NET 4.7.1로 올렸더니 발생한 것입니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 그런데 재미있는 것은, "Rebuild"했을 때만 이런 오류가 발생하고 그다음 이어서 그냥 "Build"하면 정상적으로 빌드가 됩니다. 게다가 분명히 다음과 같이 Fakes에서 제거하도록 설정했는데도,<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="System" Version="4.0.0.0"/> <ShimGeneration> <Add FullName="System.Net.Sockets.Socket"/> <span style='color: blue; font-weight: bold'><Remove FullName="System.Net.Sockets.SocketClientAccessPolicyProtocol"/></span> </ShimGeneration> </Fakes> </pre> <br /> 이에 상관없이 오류가 발생합니다. 이를 해결하려면, 오류가 발생하는 Fakes 프로젝트의 소스 코드를 잘 봐야 합니다. <br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> Error CS0619 'SocketClientAccessPolicyProtocol' is obsolete: 'This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.' [<span style='color: blue; font-weight: bold'>D:\UnitTest\MyUnitTest\obj\Debug\Fakes\s\f.csproj</span>] MyUnitTest D:\UnitTest\MyUnitTest\<span style='color: blue; font-weight: bold'>f.cs</span> 17591 Active </div><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;' > D:\UnitTest\MyUnitTest\obj\Debug\Fakes\s\f.cs </pre> <br /> 검색으로 SocketClientAccessPolicyProtocol이 사용된 타입을 알아낼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > public static mqttf::Microsoft.QualityTools.Testing.Fakes.FakesDelegates.Func<global::System.Net.Sockets.SocketAsyncEventArgs, <span style='color: blue; font-weight: bold'>global::System.Net.Sockets.SocketClientAccessPolicyProtocol</span>> SocketClientAccessPolicyProtocolGet { [mqttf::Microsoft.QualityTools.Testing.Fakes.Shims.ShimMethod("get_SocketClientAccessPolicyProtocol", 20)] set { mqttf::Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimPublicInstance ((global::System.Delegate)value, typeof(global::System.Net.Sockets.SocketAsyncEventArgs), (object)null, "get_SocketClientAccessPolicyProtocol", typeof(global::System.Net.Sockets.SocketClientAccessPolicyProtocol), new global::System.Type[]{}); } } </pre> <br /> 위의 코드를 포함하는 클래스는 "System.Net.Sockets.SocketAsyncEventArgs"이고 따라서 다음과 같이 .Fakes 설정 파일에 추가하면 됩니다.<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="System" Version="4.0.0.0"/> <ShimGeneration> <Add FullName="System.Net.Sockets.Socket"/> <Remove FullName="System.Net.Sockets.SocketClientAccessPolicyProtocol"/> <span style='color: blue; font-weight: bold'><Remove FullName="System.Net.Sockets.SocketAsyncEventArgs"/></span> </ShimGeneration> </Fakes> </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
3174
(왼쪽의 숫자를 입력해야 합니다.)