2011-12-29 2 views
8

가능한 중복 :
Are automatically generated GUIDs for types in .NET consistent?Type.GUID는 컴파일의 각 유형을 고유하게 식별합니까?

나는 키 사전으로 Type를 사용하려면,하지만 난 오히려 전체 유형 이름 또는 Type.GUID 중 하나를 사용하십시오. 이 작업에 대해 얼마나 안정적이고 정확한 Type.GUID입니까?

Ayende Rahien 글 :

당신은 안정 System.Type.GUID에 의존 할 수 있나요?

안정적으로는 컴파일을 통해 같은 유형의 값이 동일하게 생성됩니다. 공공 (네임 스페이스 포함)

  • 유형 이름
  • 어셈블리 이름의 키

  • 어셈블리 : 경험적 증거는이 경우 다음과 같은 요소 유형의 GUID를 결정하는이라고 제안 시스템에 반사시켜 보면 System.Type.GUID가 결국 이 System.RuntimeType.GetGUID에 대한 호출로 변환 된 것으로 밝혀졌습니다. 에 직접 구현 된 무서운 InternallCall 메서드 중 하나입니다.런타임 자체.

    궁금 ...

  • 답변

    4

    http://msdn.microsoft.com/en-us/library/system.type.guid.aspx의 설명서에서.

    Type.GUID의 목적은 [Guid("...")]을 사용하여 클래스와 관련된 값을 가져 오는 것입니다. 그러나이 속성이 연관되지 않은 경우 GUID도 반환합니다. 문제는 그것이 문제가되는 곳입니다. 작은 테스트는 guid가 안정적임을 보여줍니다. 클래스의 GUID를 확인하고 클래스의 이름을 변경했을 때 클래스의 GUID가 변경되었는지 확인했습니다. 클래스 이름을 다시 바꿀 때 원래 GUID가 다시 나타납니다. 그러나 이러한 guid는 허공에서 벗어나기 때문에 시간, 릴리스, 프레임 워크 버전 등에서 안정적이지 않아야합니다.

    1

    나는 그것을 사전에 키로 Type.GUID 사용하여 문제를 만들지 않습니다 생각합니다. Guid가 신뢰할 수없는 경우 대부분의 COM 구성 요소가 작동하지 않을 것입니다.

    +0

    소스를 확인해 주시겠습니까? – Oded

    3

    사용하지 마십시오. ideone.com에서 테스트

    typeof(byte).GUID 
    00000000-0000-0000-0000-000000000000 
    
    typeof(int).GUID 
    00000000-0000-0000-0000-000000000000 
    
    typeof(short).GUID 
    00000000-0000-0000-0000-000000000000 
    

    , 그들은 모노 2.8

    편집을 실행을 나는 두 GUID를 사이에 충돌을 찾을 수 없습니다 다양한 (큰) 어셈블리에하는 System.Reflection 사용 후. 그래서 0-GUID 문제는 모노 관련입니다.

    +0

    어떤 조건에서? 어떤 CLR 버전입니까? 내 경우에는 (.NET 4 LINQpad 사용하여) 0이 아닌 결과를 얻을 수 있지만 다른 프로그램 건너 실행합니다. –

    +0

    난 0이 아닙니다. (.Net 4, 간단한 콘솔 앱). – ken2k

    +0

    다른 GUID가있는 이유는 무엇입니까? 어떻게 제로를 모두 얻었습니까? –

    2

    Type.FullName 또는 Type.AssemblyQualifiedName은 사용자의 필요에 맞게 사용할 수 있습니다. 또한 GUID (알 수없는 GUID와 비교하여 의미있는 이름)와 비교하여 디버깅을 단순화합니다.

    또 다른 점은 GUID 속성이 잘 문서화되어 있지 않은 것 같습니다. 따라서 나는 그것에 의지하지 않을 것입니다.

    편집 : Type 인스턴스 자체를 키로 사용할 수도 있습니다.

    1

    GUID를 매번 조회하거나 GuidAttribute 클래스를 사용하여 정적으로 GUID를 설정해야 사전을 동적으로 작성해야합니다. 보장되지 않는 행동에 의존해서는 안됩니다.

    관련 문제