XML 문서 파일 처리

컴파일러는 문서 생성을 위해 태그가 지정되는 코드의 각 구문에 대해 ID 문자열을 생성합니다. 자세한 내용은 권장 태그 설명서 주석을 참조 하세요. ID 문자열은 구문을 고유하게 식별합니다. XML 파일을 처리하는 프로그램은 ID 문자열을 사용하여 설명서가 적용되는 해당 .NET Framework 메타데이터 또는 리플렉션 항목을 식별할 수 있습니다.

XML 파일은 코드의 계층적 표현이 아니라 각 요소에 대해 생성된 ID가 있는 플랫 목록입니다.

컴파일러는 ID 문자열을 생성할 때 다음 규칙을 관찰합니다.

  • 문자열에 공백이 배치되지 않았습니다.

  • ID 문자열의 첫 부분이 뒤에 콜론이 붙은 한 글자로 식별 대상 멤버를 식별합니다. 사용되는 멤버 유형은 다음과 같습니다.

    문자 설명
    N 네임스페이스

    네임스페이스에 설명서 주석을 추가할 수 없으며 네임스페이스에 대한 cref 참조가 가능합니다.
    T 형식: 클래스, 인터페이스, 구조체, 열거형, 대리자
    D Typedef
    F 필드
    P 속성(인덱서 또는 기타 인덱싱된 속성 포함)
    M 메서드(생성자, 연산자 등과 같은 특수 메서드 포함)
    E 이벤트
    ! 오류 문자열

    문자열의 나머지 부분은 오류에 대한 정보를 제공합니다. MSVC 컴파일러는 확인할 수 없는 링크에 대한 오류 정보를 생성합니다.
  • 문자열의 두 번째 부분은 네임스페이스의 루트부터 시작되는 항목의 정규화된 이름입니다. 항목의 이름과 바깥쪽 형식 또는 형식들 및 네임스페이스는 마침표로 구분됩니다. 항목 자체의 이름에 마침표가 있으면 이러한 요소를 구분하는 마침표가 해시 기호(‘#’)로 바뀝니다. 항목 이름에는 해시 기호가 직접적으로 포함되지 않는다고 가정합니다. 예를 들어 생성자의 정규화된 이름은 String 다음과 같습니다 System.String.#ctor.

  • 속성 및 메서드의 경우 메서드에 대한 인수가 있으면 괄호로 묶인 인수 목록이 문자열 뒤에 붙습니다. 인수가 없으면 괄호도 없습니다. 인수는 쉼표로 구분됩니다. 각 인수는 .NET Framework 서명에서 인코딩되는 것과 동일한 방식으로 인코딩됩니다.

    • 기본 형식. 일반 형식(ELEMENT_TYPE_CLASS 또는 ELEMENT_TYPE_VALUETYPE)은 형식의 정규화된 이름으로 표시됩니다.

    • 내장 형식(예: ELEMENT_TYPE_I4, , ELEMENT_TYPE_OBJECT, ELEMENT_TYPE_TYPEDBYREFELEMENT_TYPE_STRINGELEMENT_TYPE_VOID)은 해당 전체 형식의 정규화된 이름으로 표시됩니다(예: <a0/>System.Int32).

    • ELEMENT_TYPE_PTR는 수정된 형식 뒤에 ‘*’으로 표시됩니다.

    • ELEMENT_TYPE_BYREF는 수정된 형식 뒤에 ‘@’으로 표시됩니다.

    • ELEMENT_TYPE_PINNED는 수정된 형식 뒤에 ‘^’으로 표시됩니다. MSVC 컴파일러는 이 요소를 생성하지 않습니다.

    • ELEMENT_TYPE_CMOD_REQ 는 수정된 형식에 따라 '|' 및 한정자 클래스의 정규화된 이름으로 표시됩니다. MSVC 컴파일러는 이 요소를 생성하지 않습니다.

    • ELEMENT_TYPE_CMOD_OPT 는 수정된 형식에 따라 '!' 및 한정자 클래스의 정규화된 이름으로 표시됩니다.

    • ELEMENT_TYPE_SZARRAY 는 배열의 요소 형식에 따라 "[]"로 표시됩니다.

    • ELEMENT_TYPE_GENERICARRAY 는 배열의 요소 형식에 따라 "[?]"로 표시됩니다. MSVC 컴파일러는 이 요소를 생성하지 않습니다.

    • ELEMENT_TYPE_ARRAY는 하한::크기,][표현됩니다. 여기서 쉼표 수는 순위 -1이고, 각 차원의 하한 및 크기(알려진 경우)는 10진수로 표시됩니다. 하한이나 크기가 지정되지 않은 경우에는 생략됩니다. 특정 차원에 대해 하한 및 크기를 생략하면 ':'도 생략됩니다. 예를 들어 하한 및 지정되지 않은 크기로 1이 있는 2차원 배열은 로 [1:,1:]표시됩니다.

    • ELEMENT_TYPE_FNPTR은 “=FUNC:type(signature)”로 표시됩니다. 여기서 type은 반환 형식이고 signature는 메서드의 인수입니다. 인수가 없으면 괄호는 생략됩니다. MSVC 컴파일러는 이 요소를 생성하지 않습니다.

    다음 서명 구성 요소는 오버로드된 메서드를 구분하는 데 사용되지 않으므로 표시되지 않습니다.

    • 호출 규칙

    • 반환 형식

    • ELEMENT_TYPE_SENTINEL

  • 변환 연산자의 경우에만 메서드의 반환 값은 이전에 인코딩된 것처럼 '~'로 인코딩된 다음 반환 형식으로 인코딩됩니다.

  • 제네릭 형식의 경우에는 형식 이름 뒤에 역따옴표와 제네릭 형식 매개 변수의 수를 나타내는 숫자가 차례로 붙습니다. 예를 들면 다음과 같습니다.

    <member name="T:MyClass`2">
    

    이 예제에서는 .로 public class MyClass<T, U>정의된 형식을 보여 있습니다.

    제네릭 형식을 매개 변수로 사용하는 메서드의 경우 제네릭 형식 매개 변수는 앞에 백 틱이 있는 숫자로 지정됩니다(예: '0, '1). 각 숫자는 형식의 제네릭 매개 변수에 대한 0부터 시작하는 배열 위치를 나타냅니다.

예시

다음 예제에서는 클래스와 해당 멤버의 ID 문자열이 생성되는 방식을 보여 줍니다.

// xml_id_strings.cpp
// compile with: /clr /doc /LD
///
namespace N {
// "N:N"

   /// <see cref="System" />
   //  <see cref="N:System"/>
   ref class X {
   // "T:N.X"

   protected:
      ///
      !X(){}
      // "M:N.X.Finalize", destructor's representation in metadata

   public:
      ///
      X() {}
      // "M:N.X.#ctor"

      ///
      static X() {}
      // "M:N.X.#cctor"

      ///
      X(int i) {}
      // "M:N.X.#ctor(System.Int32)"

      ///
      ~X() {}
      // "M:N.X.Dispose", Dispose function representation in metadata

      ///
      System::String^ q;
      // "F:N.X.q"

      ///
      double PI;
      // "F:N.X.PI"

      ///
      int f() { return 1; }
      // "M:N.X.f"

      ///
      int bb(System::String ^ s, int % y, void * z) { return 1; }
      // "M:N.X.bb(System.String,System.Int32@,System.Void*)"

      ///
      int gg(array<short> ^ array1, array< int, 2 >^ IntArray) { return 0; }
      // "M:N.X.gg(System.Int16[], System.Int32[0:,0:])"

      ///
      static X^ operator+(X^ x, X^ xx) { return x; }
     // "M:N.X.op_Addition(N.X,N.X)"

      ///
      property int prop;
      // "M:N.X.prop"

      ///
      property int prop2 {
      // "P:N.X.prop2"

         ///
         int get() { return 0; }
         // M:N.X.get_prop2

         ///
         void set(int i) {}
         // M:N.X.set_prop2(System.Int32)
      }

      ///
      delegate void D(int i);
      // "T:N.X.D"

      ///
      event D ^ d;
      // "E:N.X.d"

      ///
      ref class Nested {};
      // "T:N.X.Nested"

      ///
      static explicit operator System::Int32 (X x) { return 1; }
      // "M:N.X.op_Explicit(N.X!System.Runtime.CompilerServices.IsByValue)~System.Int32"
   };
}

참고 항목

XML 설명서