Share via


런타임 지시문 정책 설정

.NET 네이티브의 런타임 지시문 정책 설정에 따라 런타임의 형식 및 형식 멤버 사용 가능 여부가 결정됩니다. 필요한 메타데이터가 없으면 리플렉션, serialization/deserialization 또는 .NET Framework 형식을 COM 또는 Windows 런타임으로 마샬링하는 기능을 사용하는 작업이 실패할 수 있으며 예외가 throw됩니다. 가장 일반적인 예외는 MissingMetadataExceptionMissingInteropDataException(interop의 경우)입니다.

런타임 정책 설정은 런타임 지시문(.rd.xml) 파일에 의해 제어됩니다. 각 런타임 지시문은 어셈블리(<Assembly> 요소), 형식(<Type> 요소) 또는 메서드(<Method> 요소)와 같은 특정 프로그램 요소에 대한 정책을 정의합니다. 지시문에는 다음 섹션에서 설명하는 리플렉션 정책 형식, serialization 정책 형식 및 interop 정책 형식을 정의하는 하나 이상의 특성이 포함됩니다. 특성의 값에 따라 정책 설정이 정의됩니다.

정책 유형

런타임 지시문 파일은 리플렉션, serialization 및 interop의 세 가지 정책 형식 범주를 인식합니다.

  • 리플렉션 정책 형식은 런타임에 리플렉션에 사용할 수 있는 메타데이터를 결정합니다.

    • Activate - 인스턴스를 활성화할 수 있도록 생성자에 대한 런타임 액세스를 제어합니다.

    • Browse - 프로그램 요소에 대한 정보 쿼리를 제어합니다.

    • Dynamic - 동적 프로그래밍을 사용할 수 있도록 모든 형식 및 멤버에 대한 런타임 액세스를 제어합니다.

    다음 표에는 리플렉션 정책 형식과 해당 형식을 사용할 수 있는 프로그램 요소가 나와 있습니다.

    요소 활성화 찾아보기 동적
    <애플리케이션> ✔️ ✔️ ✔️
    <어셈블리> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <이벤트> ✔️ ✔️
    <필드> ✔️ ✔️
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <방법> ✔️ ✔️
    <MethodInstantiation> ✔️ ✔️
    <네임스페이스> ✔️ ✔️ ✔️
    <매개 변수> ✔️ ✔️ ✔️
    <속성> ✔️ ✔️
    <Subtypes> ✔️ ✔️ ✔️
    <Type> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️
  • Serialization 정책 형식에 따라 런타임에 serialization 및 deserialization에 사용할 수 있는 메타데이터가 결정됩니다.

    • Serialize - Newtonsoft JSON serializer 등의 타사 라이브러리를 통해 형식 인스턴스를 serialize할 수 있도록 생성자, 필드 및 속성에 대한 런타임 액세스를 제어합니다.

    • DataContractSerializer - DataContractSerializer 클래스가 형식 인스턴스를 serialize할 수 있도록 생성자, 필드 및 속성에 대한 런타임 액세스를 제어합니다.

    • DataContractJsonSerializer - DataContractJsonSerializer 클래스가 형식 인스턴스를 serialize할 수 있도록 생성자, 필드 및 속성에 대한 런타임 액세스를 제어합니다.

    • XmlSerializer - XmlSerializer 클래스가 형식 인스턴스를 serialize할 수 있도록 생성자, 필드 및 속성에 대한 런타임 액세스를 제어합니다.

    다음 표에는 serialization 정책 형식과 해당 형식을 사용할 수 있는 프로그램 요소가 나와 있습니다.

    요소 Serialize DataContractSerializer DataContractJsonSerializer XmlSerializer
    <애플리케이션> ✔️ ✔️ ✔️ ✔️
    <어셈블리> ✔️ ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️ ✔️
    <이벤트>
    <필드> ✔️
    <GenericParameter> ✔️ ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️ ✔️
    <방법>
    <MethodInstantiation>
    <네임스페이스> ✔️ ✔️ ✔️ ✔️
    <매개 변수> ✔️ ✔️ ✔️ ✔️
    <속성> ✔️
    <Subtypes> ✔️ ✔️ ✔️ ✔️
    <Type> ✔️ ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️ ✔️
  • interop 정책 형식에 따라 런타임에 참조 형식, 값 형식 및 함수 포인터를 COM 및 Windows 런타임으로 전달하는 데 사용할 수 있는 메타데이터가 결정됩니다.

    • MarshalObject - 참조 형식에 대해 COM 및 Windows 런타임으로의 네이티브 마샬링을 제어합니다.

    • MarshalDelegate - 대리자 형식을 함수 포인터로 마샬링하는 네이티브 마샬링을 제어합니다.

    • MarshalStructure - 값 형식에 대해 COM 및 Windows 런타임으로의 네이티브 마샬링을 제어합니다.

    다음 표에는 interop 정책 형식과 해당 형식을 사용할 수 있는 프로그램 요소가 나와 있습니다.

    요소 MarshalObject MarshalDelegate MarshalStructure
    <애플리케이션> ✔️ ✔️ ✔️
    <어셈블리> ✔️ ✔️ ✔️
    <AttributeImplies> ✔️ ✔️ ✔️
    <이벤트>
    <필드>
    <GenericParameter> ✔️ ✔️ ✔️
    <ImpliesType> ✔️ ✔️ ✔️
    <방법>
    <MethodInstantiation>
    <네임스페이스> ✔️ ✔️ ✔️
    <매개 변수> ✔️ ✔️ ✔️
    <속성>
    <Subtypes> ✔️ ✔️ ✔️
    <Type> ✔️ ✔️ ✔️
    <TypeInstantiation> ✔️ ✔️ ✔️
    <TypeParameter> ✔️ ✔️ ✔️

정책 설정

각 정책 형식은 다음 표에 나와 있는 값 중 하나로 설정할 수 있습니다. 형식 멤버를 나타내는 요소는 기타 요소와는 다른 정책 설정 집합을 지원합니다.

정책 설정 설명 Assembly, Namespace, TypeTypeInstantiation 요소 Event, Field, Method, MethodInstantiationProperty 요소
All .NET 네이티브 도구 체인에서 제거하지 않는 모든 형식과 멤버에 대해 정책을 사용하도록 설정합니다. ✔️
Auto 해당 프로그램 요소에 대한 정책 형식으로 기본 정책을 사용해야 함을 지정합니다. 이 설정은 해당 정책 형식에 대해 정책을 생략하는 것과 같습니다. Auto는 보통 부모 요소에서 정책이 상속됨을 나타내는 데 사용됩니다. ✔️ ✔️
Excluded 특정 프로그램 요소에 대해 정책을 사용하지 않음을 나타냅니다. 예를 들어

<Type Name="BusinessClasses.Person" Browse="Excluded" Dynamic="Excluded" />

런타임 지시문은 BusinessClasses.Person 클래스의 메타데이터를 검색하거나 Person 개체를 동적으로 인스턴스화 및 수정하는 데 사용할 수 없음을 지정합니다.
✔️ ✔️
Included 부모 형식의 메타데이터를 사용할 수 있는 경우 정책을 사용하도록 설정합니다. ✔️
Public 도구 체인이 형식 또는 멤버를 불필요한 것으로 결정하여 제거하는 경우가 아니면 public 형식 또는 멤버에 대해 정책을 사용하도록 설정합니다. 이 설정은 도구 체인에서 불필요한 것으로 결정하는 public 형식 및 멤버도 항상 사용할 수 있도록 하는 Required Public과는 다릅니다. ✔️
PublicAndInternal 도구 체인이 형식 또는 멤버를 불필요한 것으로 결정하여 제거하는 경우가 아니면 public 및 내부 형식이나 멤버에 대해 정책을 사용하도록 설정합니다. 이 설정은 도구 체인에서 불필요한 것으로 결정하는 public 및 내부 형식과 멤버도 항상 사용할 수 있도록 하는 Required PublicAndInternal과는 다릅니다. ✔️
Required 멤버가 사용된 것으로 표시되어도 멤버에 대한 정책이 사용되며 메타데이터가 제공됨을 나타냅니다. ✔️
Required Public public 형식 또는 멤버에 대해 정책을 사용하도록 설정하며 public 형식 또는 멤버의 메타데이터를 항상 사용할 수 있습니다. 이 설정은 도구 체인이 필요하다고 결정하는 public 형식과 멤버의 메타데이터만 제공하는 Public과는 다릅니다. ✔️
Required PublicAndInternal public 및 내부 형식 또는 멤버에 대해 정책을 사용하도록 설정하며 public 및 내부 형식 또는 멤버의 메타데이터를 항상 사용할 수 있습니다. 이 설정은 도구 체인이 필요하다고 결정하는 public 및 내부 형식과 멤버의 메타데이터만 제공하는 PublicAndInternal과는 다릅니다. ✔️
Required All 도구 체인이 사용 여부에 관계없이 모든 형식과 멤버를 유지해야 하도록 지정하고 해당 형식과 멤버에 대해 정책을 사용하도록 설정합니다. ✔️

참고 항목