Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

VB.NET 어셈블리의 .NET Reflector 소스 코드를 분석할 때 알아두면 좋은 사항

VB.NET으로 만들어진 모듈을 살펴보면서 컴파일까지 해보고 싶은 마음에 .NET Reflector를 이용하여 프로젝트 내보내기를 했습니다. 그랬더니 다음과 같은 식의 코드가 생성되었습니다.

<STAThread> _
Public Shared Sub Main()
    Dim test2 As Short = 2
    Dim test As String = Conversions.ToString(
        Operators.ConcatenateObject((Conversions.ToString(CInt(test2)) & "test"), "TEST"))
    Try 
    Catch exception1 As Exception
        ProjectData.SetProjectError(exception1)
        Dim ex As Exception = exception1
        Console.WriteLine(ex.Message)
        Throw ex
        ProjectData.ClearProjectError
    End Try
End Sub

애석하게도 위의 소스 코드는 정상적으로 컴파일되지 않습니다. 왜냐하면 Conversions, Operators, ProjectData 타입들에 대해 "'ProjectData' is not declared. It may be inaccessible due to its protection level." 같은 식의 접근 제한 오류가 발생하기 때문인데요. .NET Reflector에서 해당 소스 코드의 연결된 링크를 따라가 보면 Microsoft.VisualBasic DLL의 Microsoft.VisualBasic.CompilerServices 네임스페이스에 각각 정의된 것을 확인할 수 있었습니다.

그래서, Microsoft.VisualBasic 어셈블리를 Visual Basic .NET 프로젝트에서 참조를 시도했는데... ^^; "A reference to 'Microsoft.VisualBasic' could not be added. This component is already automatically referenced by the build system."이라는 오류를 내면서 진행이 안됩니다. 어허~~~ ^^; 문제군요. 그러다가, 문득 예전에 VB를 하면서 알았던 CStr 같은 VB 내장함수가 생각났습니다. 혹시 그런 것들의 확장이 아닐까 싶어서 테스트 삼아서 VB.NET으로 몇 가지 소스 코드를 테스트 해보니 답이 나왔습니다. ^^

우선, Conversions는 CStr 유의 VB 내장함수를 사용하는 경우 .NET에 의해 치환되는 것이 맞았습니다. 그다음 Operators 유들은 VB에서 "& (ampersand)" 연산자를 이용하는 경우 발생했습니다. 예를 들어, Object 개체와 문자열 개체를 &로 연결하면 Operators.ConcatenateObject 메서드 호출로 변경됩니다.

마지막으로 ProjectData의 SetProjectError나 ClearProjectError가 문제였는데요. 이건 별도로 바꿔주기보다는 그냥 삭제해 주시면 됩니다. 따라서, 위의 .NET Reflector 소스 코드를 재현하는 VB.NET 코드는 다음과 같이 재구성됩니다.

Module Module1

    Sub Main()
        Dim test As String
        Dim test2 As Int16

        Dim objTest As Object

        test2 = 2

        test = CStr(test2) & "test"

        objTest = test

        test = CStr(objTest & "TEST")

        Try
            Dim a As Array
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Throw (ex)
        End Try

    End Sub

End Module

어찌되었든, 하위 호환성을 위한 VB.NET 팀의 노력이 엿보이는 부분입니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/27/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  172  173  174  [175]  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
725정성태5/21/200929540VS.NET IDE: 61. Visual Studio 2010 베타1과 Visual Studio 2008의 혼합 개발 [2]
724정성태5/19/200945284.NET Framework: 136. 자바와 닷넷의 압축 호환파일 다운로드2
723정성태5/18/200937915.NET Framework: 135. C# - Deflate, GZip, Zip
722정성태5/18/200925873개발 환경 구성: 45. SQL 서버 2008 백업 구성 [2]
721정성태5/14/200931803오류 유형: 81. Package 실행 오류 - Error 15404
720정성태5/13/200928710오류 유형: 80. SQL Server 2008 - Package 실행 오류의 구체적인 원인 확인
719정성태5/12/200929619.NET Framework: 134. WPF - XBAP을 호스팅하고 있는 인터넷 익스플로러 인터페이스 구하기파일 다운로드1
717정성태5/11/200930073개발 환경 구성: 44. VHD 파일 크기 확장하는 방법 - 두 번째 이야기
714정성태5/7/200928553Windows: 45. Windows 7 RC와 함께 공개된 Windows Virtual PC 베타
713정성태4/30/200960387오류 유형: 79. DLL 'xxxxx.dll'을(를) 로드할 수 없습니다. [1]
712정성태4/28/200932979오류 유형: 78. Windows Vista/2008에서의 MSXML4.cab 파일 배포 문제
711정성태4/27/200932902개발 환경 구성: 43. Hyper-V VHD 파일 크기 확장하는 방법
710정성태4/26/200933592.NET Framework: 133. CallbackOnCollectedDelegate was detected [4]파일 다운로드1
709정성태4/24/200929456개발 환경 구성: 42. Windows Vista SP1에서 사용 가능한 Hyper-V 관리 도구
708정성태4/23/200934460.NET Framework: 132. ClickOnce 배포를 명령행 수작업 구성파일 다운로드1
707정성태4/22/200933730개발 환경 구성: 41. Hyper-V에 Linux 설치 - SUSE Linux Enterprise Server 11
706정성태4/21/200929505.NET Framework: 131. ClickOnce - 그룹화시켜 다운로드파일 다운로드1
705정성태4/20/200925087개발 환경 구성: 40. TFS2008 SP1의 DBTier에 SQL Server 2008 SP1 설치 [1]
704정성태4/19/200925114개발 환경 구성: 39. Together 2007 SP1 설치
702정성태4/18/200936767.NET Framework: 130. Infragistics - Tabbed MDI WPF 응용 프로그램파일 다운로드1
701정성태4/17/200931655Windows: 44. bootsect 오류 - Access is denied.
700정성태4/17/200934734.NET Framework: 129. Infragistics WPF 컨트롤 사용 [1]
699정성태4/16/200932396.NET Framework: 128. 이벤트 멤버의 명시적 구현파일 다운로드1
696정성태4/12/200932043오류 유형: 77. RDP 연결이 되지 않는 경우. [1]
693정성태4/9/200926588오류 유형: 76. "Client found response content type of '', but expected 'text/xml'. The request failed with an empty response.No Reports".
692정성태4/8/200939817.NET Framework: 127. ClickOnce로 ActiveX를 같이 배포하는 방법 [2]파일 다운로드1
... 166  167  168  169  170  171  172  173  174  [175]  176  177  178  179  180  ...