2010-07-31 4 views
0

특정 어셈블리를 만드는 데 사용 된 언어 (C#, VB 등)를 식별하고 싶습니다.어셈블리를 만드는 데 사용 된 언어와 컴파일러를 식별 하시겠습니까?

컴파일러 (MS one, mono)도 확인하고 싶습니다.

조립품에 어떤 정보도없는 것 같습니다. Ecma-335 파티션 II의 어셈블리 머리글에 대한 섹션에는 유용한 내용이 없습니다.

어셈블리에 지문이 있는지 궁금해합니다. "아하 이것은 C#/C# 컴파일러에게는 매우 특별한 것이지만 C#으로 작성되었습니다!"

내가 쓰고있는 정적 분석 도구에 대해 알아두면 유용 할 것입니다.

+1

나는 이것이 이전에 물어 왔지만 질문을 찾을 수 없다는 것을 알고있다. – Stefan

+1

어셈블리에는 MSIL (Microsoft Intermediate Language)이 표시됩니다. MSIL을 작성한 언어를 찾을 수있는 문서화 된 방법이 없다고 생각합니다. 실제로 C# 또는 VB를 아는 특정 패턴을 찾는 것 외에는 .NET 또는 F # 또는 다른 언어와 구별되는 항목) –

+4

더하기 : ** 왜 ** 정말 필요한가? 이걸로 무엇을 하려니? –

답변

1

이것은 의도적으로 설계된 것이며, 어셈블리는 메타 데이터와 IL (언어 중립적 인 정보)을 저장합니다. 따라서 다른 언어로 작성된 코드를 쉽게 혼합하고 매치 할 수 있습니다. 아주 좋은 .NET 기능.

그러나 힌트는 있습니다. VB.NET 프로그래머는 .NET Framework의 도우미 어셈블리에서 구현되는 VB.NET 특정 언어 기능을 사용하게됩니다. CType과 같은 My 네임 스페이스 및 변환 연산자와 같습니다. Ildasm.exe를 사용하여 어셈블리를 열고 .assembly 지시문에 대한 매니페스트를 확인합니다. Microsoft.VisualBasic을 볼 수 있다면 VB.NET으로 작성된 확률이 매우 높습니다. 그것이 결정적이지는 않지만 C#에 대한 좋은 확률이없는 경우. 클래스 목록을보고 위에 <CppImplementationDetails>을 보면 C++/CLI로 작성된 것임을 알 수 있습니다.

실제로 신경 쓰지 않도록하십시오.

관련 문제