다음을 통해 공유


XAML 서비스

이 항목에서는 .NET XAML Services라는 기술 집합의 기능에 대해 설명합니다. 설명된 대부분의 서비스 및 API는 어셈블리 System.Xaml있습니다. 서비스에는 판독기 및 작성기, 스키마 클래스 및 스키마 지원, 팩터리, 클래스 특성 지정, XAML 언어 내장 지원 및 기타 XAML 언어 기능이 포함됩니다.

이 설명서 정보

.NET XAML Services에 대한 개념 설명서에서는 XAML 언어에 대한 이전 환경과 특정 프레임워크(예: WPF(Windows Presentation Foundation) 또는 Windows Workflow Foundation) 또는 특정 기술 기능 영역(예: Microsoft.Build.Framework.XamlTypes빌드 사용자 지정 기능)에 적용할 수 있는 방법을 가정합니다. 이 설명서에서는 XAML의 기본 사항을 태그 언어, XAML 구문 용어 또는 기타 소개 자료로 설명하지 않습니다. 대신, 이 설명서는 특히 System.Xaml 어셈블리 라이브러리에서 사용하도록 설정된 .NET XAML 서비스를 사용하는 데 중점을 둡니다. 이러한 API의 대부분은 XAML 언어 통합 및 확장성 시나리오를 위한 것입니다. 여기에는 다음 시나리오가 포함될 수 있습니다.

  • 기본 XAML 판독기 또는 XAML 기록기의 기능 확장(XAML 노드 스트림 직접 처리, 사용자 고유의 XAML 판독기 또는 XAML 기록기 파생)

  • 특정 프레임워크 종속성이 없는 XAML에서 사용할 수 있는 사용자 지정 형식을 정의하고 형식을 특성화하여 해당 XAML 형식 시스템 특성을 .NET XAML Services에 전달합니다.

  • XAML 판독기 또는 XAML 기록기를 애플리케이션의 구성 요소로 호스팅합니다(예: XAML 태그 원본에 대한 시각적 디자이너 또는 대화형 편집기).

  • XAML 값 변환기 작성(태그 확장, 사용자 지정 형식의 형식 변환기)

  • 사용자 지정 XAML 스키마 컨텍스트 정의(형식 원본을 백업하기 위한 대체 어셈블리 로드 기술 사용, 항상 어셈블리를 반영하는 대신 알려진 형식 조회 기술 사용, CLR(공용 언어 런타임) AppDomain 및 관련 보안 모델을 사용하지 않는 로드된 어셈블리 개념 사용).

  • 기본 XAML 형식 시스템 확장

  • Lookup 또는 Invoker 기술을 사용하여 XAML 형식 시스템과 형식 지원 평가 방법에 영향을 줍니다.

XAML에서 언어로 소개 자료를 찾는 경우 XAML 개요(WPF .NET)수 있습니다. 이 항목에서는 WPF(Windows Presentation Foundation)와 XAML 태그 및 XAML 언어 기능 모두에 새로운 대상을 위한 XAML에 대해 설명합니다. 또 다른 유용한 문서는 XAML 언어 사양소개 자료입니다.

.NET 아키텍처의 .NET XAML 서비스 및 System.Xaml

.NET XAML 서비스 및 System.Xaml 어셈블리는 XAML 언어 기능을 지원하는 데 필요한 많은 부분을 정의합니다. 여기에는 XAML 판독기 및 XAML 작성기에 대한 기본 클래스가 포함됩니다. 프레임워크별 XAML 구현에 없는 .NET XAML 서비스에 추가된 가장 중요한 기능은 XAML에 대한 형식 시스템 표현입니다. 형식 시스템 표현은 프레임워크의 특정 기능에 종속되지 않고 XAML 기능을 중심으로 하는 개체 지향 방식으로 XAML을 제공합니다.

XAML 형식 시스템은 XAML 원본의 태그 형식 또는 런타임 특정에 의해 제한되지 않습니다. 특정 지원 유형 시스템에 의해 제한되지도 않습니다. XAML 형식 시스템에는 형식, 멤버, XAML 스키마 컨텍스트, XML 수준 개념 및 기타 XAML 언어 개념 또는 XAML 내장 함수에 대한 개체 표현이 포함됩니다. XAML 형식 시스템을 사용하거나 확장하면 XAML 판독기 및 XAML 작성기와 같은 클래스에서 파생되고 XAML 표현의 기능을 프레임워크, 기술 또는 XAML을 사용하거나 내보내는 애플리케이션에서 사용하도록 설정된 특정 기능으로 확장할 수 있습니다. XAML 스키마 컨텍스트의 개념을 사용하면 XAML 개체 작성기 구현, 컨텍스트의 어셈블리 정보를 통해 전달되는 기술의 지원 형식 시스템 및 XAML 노드 원본의 조합으로 실용적인 개체 그래프 쓰기 작업을 수행할 수 있습니다. XAML 스키마 개념에 대한 자세한 내용을 보려면 기본 XAML 스키마 컨텍스트 및 WPF XAML 스키마 컨텍스트참조하세요.

XAML 노드 스트림, XAML 판독기 및 XAML 기록기

XAML 언어와 XAML을 언어로 사용하는 특정 기술 간의 관계에서 .NET XAML 서비스가 수행하는 역할을 이해하려면 XAML 노드 스트림의 개념과 해당 개념이 API 및 용어를 어떻게 형성하는지 이해하는 것이 도움이 됩니다. XAML 노드 스트림은 XAML 언어 표현과 XAML이 나타내거나 정의하는 개체 그래프 사이의 개념적 중간입니다.

  • XAML 판독기는 어떤 형태로든 XAML을 처리하고 XAML 노드 스트림을 생성하는 엔터티입니다. API에서 XAML 판독기는 기본 클래스 XamlReader표시됩니다.

  • XAML 작성기는 XAML 노드 스트림을 처리하고 다른 항목을 생성하는 엔터티입니다. API에서 XAML 작성기는 기본 클래스 XamlWriter표시됩니다.

    XAML과 관련된 가장 일반적인 두 가지 시나리오는 XAML을 로드하여 개체 그래프를 인스턴스화하고 애플리케이션 또는 도구에서 개체 그래프를 저장하고 XAML 표현(일반적으로 텍스트 파일로 저장된 태그 형식)을 생성하는 것입니다. XAML 로드 및 개체 그래프 만들기는 종종 이 설명서에서 로드 경로라고 합니다. 기존 개체 그래프를 XAML에 저장하거나 직렬화하는 작업은 이 설명서에서 저장 경로라고도 합니다.

    가장 일반적인 유형의 로드 경로는 다음과 같이 설명할 수 있습니다.

  • XAML 표현으로 시작하여 UTF로 인코딩된 XML 형식으로 텍스트 파일로 저장합니다.

  • 해당 XAML을 XamlXmlReader로드합니다. XamlXmlReader XamlReader 하위 클래스입니다.

  • 결과는 XAML 노드 스트림입니다. XamlXmlReader / XamlReader API를 사용하여 XAML 노드 스트림의 개별 노드에 액세스할 수 있습니다. 여기서 가장 일반적인 작업은 XAML 노드 스트림을 진행하여 "현재 레코드" 은유를 사용하여 각 노드를 처리하는 것입니다.

  • 결과 노드를 XAML 노드 스트림에서 XamlObjectWriter API로 전달합니다. XamlObjectWriter XamlWriter 하위 클래스입니다.

  • XamlObjectWriter 원본 XAML 노드 스트림을 진행하기 위해 한 번에 하나의 개체인 개체 그래프를 작성합니다. 개체 쓰기는 XAML 스키마 컨텍스트 및 지원 형식 시스템 및 프레임워크의 어셈블리 및 형식에 액세스할 수 있는 구현을 통해 수행됩니다.

  • XAML 노드 스트림의 끝에서 Result 호출하여 개체 그래프의 루트 개체를 가져옵니다.

    가장 일반적인 저장 경로 형식은 다음과 같이 설명할 수 있습니다.

  • 전체 애플리케이션 런타임의 개체 그래프, 런타임의 UI 콘텐츠 및 상태 또는 런타임에 전체 애플리케이션 개체 표현의 더 작은 세그먼트로 시작합니다.

  • 애플리케이션 루트 또는 문서 루트와 같은 논리적 시작 개체에서 개체를 XamlObjectReader로드합니다. XamlObjectReader XamlReader 하위 클래스입니다.

  • 결과는 XAML 노드 스트림입니다. XamlObjectReaderXamlReader API를 사용하여 XAML 노드 스트림의 개별 노드에 액세스할 수 있습니다. 여기서 가장 일반적인 작업은 XAML 노드 스트림을 진행하여 "현재 레코드" 은유를 사용하여 각 노드를 처리하는 것입니다.

  • 결과 노드를 XAML 노드 스트림에서 XamlXmlWriter API로 전달합니다. XamlXmlWriter XamlWriter 하위 클래스입니다.

  • XamlXmlWriter XML UTF 인코딩에 XAML을 씁니다. 이를 텍스트 파일, 스트림 또는 다른 양식으로 저장할 수 있습니다.

  • Flush 호출하여 최종 출력을 가져옵니다.

XAML 노드 스트림 개념에 대한 자세한 내용은 XAML 노드 스트림 구조 및 개념이해를 참조하세요.

XamlServices 클래스

XAML 노드 스트림을 항상 처리할 필요는 없습니다. 기본 로드 경로 또는 기본 저장 경로를 원하는 경우 XamlServices 클래스에서 API를 사용할 수 있습니다.

  • Load 다양한 서명은 부하 경로를 구현합니다. 파일 또는 스트림을 로드하거나 해당 판독기 API를 사용하여 로드하여 XAML 입력을 래핑하는 XmlReader, TextReader 또는 XamlReader 로드할 수 있습니다.

  • 다양한 Save 서명은 개체 그래프를 저장하고 스트림, 파일 또는 XmlWriter/TextWriter 인스턴스로 출력을 생성합니다.

  • Transform 로드 경로와 저장 경로를 단일 작업으로 연결하여 XAML을 변환합니다. 다른 스키마 컨텍스트 또는 다른 지원 형식 시스템을 XamlReaderXamlWriter사용할 수 있습니다. 이는 결과 XAML이 변환되는 방식에 영향을 줍니다.

XamlServices사용하는 방법에 대한 자세한 내용은 XAMLServices 클래스 및 기본 XAML 읽기 또는 쓰기참조하세요.

XAML 형식 시스템

XAML 형식 시스템은 XAML 노드 스트림의 지정된 개별 노드로 작업하는 데 필요한 API를 제공합니다.

XamlType 개체의 표현입니다. 시작 개체 노드와 끝 개체 노드 간에 처리 중인 항목입니다.

XamlMember 시작 멤버 노드와 최종 멤버 노드 간에 처리 중인 개체의 멤버에 대한 표현입니다.

GetAllMembers, GetMember, DeclaringType 같은 API는 XamlTypeXamlMember간의 관계를 보고합니다.

.NET XAML 서비스에서 구현하는 XAML 형식 시스템의 기본 동작은 CLR(공용 언어 런타임) 및 리플렉션을 사용하여 어셈블리의 CLR 형식에 대한 정적 분석을 기반으로 합니다. 따라서 특정 CLR 형식의 경우 XAML 형식 시스템의 기본 구현은 해당 형식의 XAML 스키마와 해당 멤버를 노출하고 XAML 형식 시스템의 관점에서 보고할 수 있습니다. 기본 XAML 형식 시스템에서 형식의 할당 가능성 개념은 CLR 상속에 매핑되며 인스턴스, 값 형식 등의 개념도 CLR의 지원 동작 및 기능에 매핑됩니다.

XAML 언어 기능에 대한 참조

XAML을 지원하기 위해 .NET XAML 서비스는 XAML 언어 XAML 네임스페이스에 정의된 XAML 언어 개념의 특정 구현을 제공합니다. 이러한 항목은 특정 참조 페이지로 문서화됩니다. 언어 기능은 .NET XAML 서비스에서 정의한 XAML 판독기 또는 XAML 작성기에 의해 처리될 때 이러한 언어 기능이 작동하는 방식의 관점에서 설명됩니다. 자세한 내용은 XAML 네임스페이스(x:) 언어 기능참조하세요.