2009-02-23 3 views
10

이것은 C++/CLI 및 Managed C++ 어셈블리를 찾는 방법으로 시작되었으므로 내부 클래스의 모든 클래스를 테스트하여 상속 된 모든 메서드가 다시 구현되는지 확인할 수 있습니다. 이 과정을 빌드 프로세스 단계로 추가하여 다시는 발생하지 않도록하고 싶습니다..NET 어셈블리가 사후 사젂으로 작성된 언어를 확인할 수 있습니까?

사용 된 .NET 언어를 결정하는 것이 흥미로울 것이므로이 문제에 대해 생각해 보면 조금 궁금합니다. 이 때문에 조금 더 가서 모든 .NET 언어의 어셈블리를 비교했습니다. 가지고, AssemblyConfigurationAttribute을 가지고 GuidAttribute

  • VB -

    • C 번호 : - 지금까지 여기에 내가 유형을 비교하고 반사를 통해 .NET 어셈블리의 집합의 속성 데이터를 내가 쓴 작은 프로그램을 통해 발견 한 것입니다 Has My GuidAttibute
    • F # - 사용되는 컴파일러의 버전도 지정하는 FSharpInterfaceDataVersionAttribute가 있습니다.
    • C++ (모두/clr : 안전함) - 추가 유형이 있습니다 (FrameInfo, type_info)
    • C++/clr : safe - 고유 한 리플렉션 기능이없는 것으로 보입니다.

    순서대로 해석하는 것이 합리적 일 수는 : 그것은 FSharpInterfaceDataVersionAttribute 그것이 내가 발견 여분 종류의 거대한 세트의 어떤이있는 경우 그것은 C++있어

  • 이있는 경우는 F 번호의

    1. .
    2. "My *"Types가 있으면 VB입니다.
    3. 이 AssemblyConfigurationAttribute가 있거나 GuidAttribute
    4. 그것은 C++/CLR 될 가능성이 있다면 그것은 C 번호입니다 :이 끔찍한 해킹 한, 내가 거기에 년후 있는지 확인하기 위해 여기에 확인하고 싶어서,

    그러나 안전 다른 옵션을 사용할 수 없습니다.

  • +0

    흥미로운 질문이지만, 왜 라틴어를 사용합니까? 소급해서 이해하기가 더 쉬울 것입니다. 여기에있는 모든 사람들이 영어 원어민이 아닙니다. – danio

    +1

    @danio : 라틴어는 굉장하기 때문에? – bcat

    답변

    2

    .NET 언어가 컴파일되면 얻을 수있는 것은 모두 IL입니다. 어셈블리를 생성 한 특정 언어를 결정하는 표준 방법을 알고 있지 않습니다. 기존 조립품을 IL로 가져와 ildasm (분해)하여 IL (조립)하여 사실상 동일한 조립품으로 다시 조립할 수 있습니다.

    사용하는 경험적 방법은 어셈블리를 만드는 데 사용 된 언어를 식별하는 합리적이고 교묘 한 방법입니다. 그러나 이러한 세부 정보는 컴파일러 버전의 언어간에 변경 될 수 있습니다.

    3

    VB 나 F # 클래스 라이브러리에 대한 참조를 확인하는 것이 가장 덜 불안한 방법 인 것처럼 보이지만 다른 사람들이 언급 한 것처럼 발견 할 수 있습니다. 네이티브 바이너리가 어떤 언어인지를 결정하는 확실한 방법이없는 것처럼 (하지만 당신은 거의 경험적으로 100 % 확신 할 수 있습니다)

    관련 문제