다음을 통해 공유


.NET 네이티브 시작하기

새 UWP 앱을 작성하든 기존 Windows 8.x 앱(이전에는 Microsoft Store 앱이라고도 함)을 마이그레이션하든 동일한 절차 집합을 따를 수 있습니다. .NET 네이티브 앱을 만들려면 다음 단계를 수행합니다.

  1. UWP(유니버설 Windows 플랫폼) 앱을 개발하고 앱의 디버그 빌드를 테스트하여 제대로 작동하는지 확인합니다.

  2. 추가 리플렉션 및 시리얼라이제이션 사용처리합니다.

  3. 앱의 릴리스 빌드를 배포하고 테스트합니다.

  4. 누락된 메타데이터를 수동으로 해결하고 모든 문제가 해결될 때까지 3단계 를 반복합니다.

비고

기존 Windows 8.x 앱을 .NET 네이티브로 마이그레이션하기 전에 Windows 8.x 앱을 .NET 네이티브로 마이그레이션하기가이드를 반드시 검토해야 합니다.

1단계: UWP 앱의 디버그 빌드 개발 및 테스트

새 앱을 개발하든 기존 앱을 마이그레이션하든 관계없이 Windows 앱과 동일한 프로세스를 따릅니다.

  1. Visual C# 또는 Visual Basic용 유니버설 Windows 앱 템플릿을 사용하여 Visual Studio에서 새 UWP 프로젝트를 만듭니다. 기본적으로 CoreCLR을 대상으로 하는 모든 UWP 애플리케이션 및 해당 릴리스 빌드는 .NET 네이티브 도구 체인을 사용하여 컴파일됩니다.

  2. UWP 앱 프로젝트를 .NET 네이티브 도구 체인을 사용하여 컴파일하는 경우와 사용하지 않고 컴파일하는 경우 사이에는 알려진 호환성 문제가 있습니다. 자세한 내용은 마이그레이션 가이드 를 참조하세요.

이제 로컬 시스템(또는 시뮬레이터)에서 실행되는 .NET 네이티브 노출 영역에 대해 C# 또는 Visual Basic 코드를 작성할 수 있습니다.

중요합니다

앱을 개발할 때, 코드에서 serialization이나 리플렉션의 사용을 기록하세요.

기본적으로 디버그 빌드는 신속한 F5 배포를 사용하도록 JIT 컴파일되고 릴리스 빌드는 .NET 네이티브 사전 컴파일 기술을 사용하여 컴파일됩니다. 즉, 앱의 디버그 빌드를 빌드하고 테스트하여 .NET 네이티브 도구 체인으로 컴파일하기 전에 정상적으로 작동하는지 확인해야 합니다.

2단계: 추가 리플렉션 및 직렬화 사용을 처리

런타임 지시문 파일(Default.rd.xml)은 만들 때 프로젝트에 자동으로 추가됩니다. C#에서 개발하는 경우 프로젝트의 속성 폴더에 있습니다. Visual Basic에서 개발하는 경우 프로젝트의 내 프로젝트 폴더에 있습니다.

비고

런타임 지시문 파일이 필요한 이유에 대한 배경을 제공하는 .NET 네이티브 컴파일 프로세스의 개요는 .NET 네이티브 및 컴파일참조하세요.

런타임 지시문 파일은 런타임에 앱에 필요한 메타데이터를 정의하는 데 사용됩니다. 경우에 따라 파일의 기본 버전이 적절할 수 있습니다. 그러나 serialization 또는 리플렉션을 사용하는 일부 코드는 런타임 지시문 파일에 추가 항목이 필요할 수 있습니다.

직렬화

serializer에는 두 가지 범주가 있으며, 둘 다 런타임 지시문 파일에 추가 항목이 필요할 수 있습니다.

  • 비 리플렉션 기반 직렬 변환기입니다. .NET Framework 클래스 라이브러리(예: DataContractSerializer, DataContractJsonSerializerXmlSerializer 클래스)에 있는 serializer는 리플렉션을 사용하지 않습니다. 그러나 직렬화 또는 역직렬화할 개체에 따라 코드를 생성해야 합니다. 자세한 내용은 직렬화 및 메타데이터의 „Microsoft Serializers” 섹션을 참조하세요.

  • 타사 직렬화 도구 일반적으로 사용되는 타사 serialization 라이브러리 중 하나인 Newtonsoft JSON serializer는 주로 리플렉션 기반으로 작동하며, 객체 직렬화와 역직렬화를 지원하기 위해 *.rd.xml 파일에 항목이 필요합니다. 자세한 내용은 직렬화 및 메타데이터의 "타사 직렬 변환기" 섹션을 참조하세요.

리플렉션 사용하는 메서드

경우에 따라 코드에서 리플렉션을 사용하는 것이 명확하지 않습니다. 일부 일반적인 API 또는 프로그래밍 패턴은 리플렉션 API의 일부로 간주되지 않지만 리플렉션을 사용하여 성공적으로 실행됩니다. 여기에는 다음과 같은 형식 인스턴스화 및 메서드 생성 메서드가 포함됩니다.

자세한 내용은 리플렉션을 사용하는 API를 참조하세요.

비고

런타임 지시문 파일에 사용되는 형식 이름은 정규화되어야 합니다. 예를 들어 파일은 "String" 대신 "System.String"을 지정해야 합니다.

3단계: 앱의 릴리스 빌드 배포 및 테스트

런타임 지시문 파일을 업데이트한 후 앱의 릴리스 빌드를 다시 빌드하고 배포할 수 있습니다. .NET 네이티브 이진 파일은 프로젝트 속성 대화 상자인 컴파일 탭의 빌드 출력 경로 텍스트 상자에 지정된 디렉터리의 ILC.out 하위 디렉터리에 배치됩니다. 이 폴더에 없는 이진 파일은 .NET 네이티브로 컴파일되지 않았습니다. 앱을 철저히 테스트하고 각 대상 플랫폼에서 오류 시나리오를 포함한 모든 시나리오를 테스트합니다.

앱이 제대로 작동하지 않는 경우(특히 런타임에 MissingMetadataException 또는 MissingInteropDataException 예외를 던지는 경우) 다음 섹션의 지침을 따르세요. 4단계: 누락된 메타데이터수동으로 해결합니다. 첫 번째 예외를 사용하도록 설정하면 이러한 버그를 찾는 데 도움이 될 수 있습니다.

앱의 디버그 빌드를 테스트 및 디버그했으며 MissingMetadataException 제거하고 MissingInteropDataException 예외를 확신하는 경우 앱을 최적화된 .NET 네이티브 앱으로 테스트해야 합니다. 이렇게 하려면 활성 프로젝트 구성을 디버그에서 릴리스로 변경합니다.

4단계: 누락된 메타데이터 수동 해결

ko-KR: .NET 네이티브에서 가장 일반적으로 발생하는 오류로는 데스크톱에서는 발생하지 않는 런타임 예외인 MissingMetadataException, MissingInteropDataException, 또는 MissingRuntimeArtifactException이 있습니다. 경우에 따라 메타데이터가 없으면 예측할 수 없는 동작이나 앱 오류에서도 나타날 수 있습니다. 이 섹션에서는 런타임 지시문 파일에 지시문을 추가하여 이러한 예외를 디버그하고 해결하는 방법을 설명합니다. 런타임 지시문 형식에 대한 정보는 런타임 지시문(rd.xml) 구성 파일 참조를 참고하세요. 런타임 지시문을 추가한 후에는 앱 다시 배포 및 테스트하고, 더 이상 예외가 발생하지 않을 때까지 MissingMetadataException, MissingInteropDataException및 missingRuntimeArtifactException 예외를 해결해야 합니다.

팁 (조언)

앱이 코드 변경에 탄력적으로 작동할 수 있도록 높은 수준에서 런타임 지시문을 지정합니다. 멤버 수준이 아닌 네임스페이스 및 형식 수준에서 런타임 지시문을 추가하는 것이 좋습니다. 탄력성과 큰 이진 파일 및 더 긴 컴파일 시간 사이에는 절충이 있을 수 있습니다.

누락된 메타데이터 예외를 해결할 때 다음 문제를 고려합니다.

  • 예외 전에 앱이 무엇을 하려고 되었나요?

    • 예를 들어, 데이터 바인딩이나 데이터 직렬화 및 역직렬화를 하거나, 리플렉션 API를 직접 사용했나요?
  • 단독 사례인가요, 아니면 다른 유형에서도 동일한 문제를 겪을 것이라고 생각하십니까?

    • 예를 들어 앱의 개체 모델에서 형식을 직렬화할 때 MissingMetadataException 예외가 발생합니다. 직렬화될 다른 형식을 알고 있는 경우 해당 형식에 대한 런타임 지시문(또는 코드가 얼마나 잘 구성되었는지에 따라 포함 네임스페이스에 대해)을 동시에 추가할 수 있습니다.
  • 리플렉션을 사용하지 않도록 코드를 다시 작성할 수 있나요?

    • 예를 들어, 예상되는 형식을 알고 있을 때 코드에서 dynamic 키워드를 사용하나요?

    • 코드는 더 나은 대안을 사용할 수 있을 때 리플렉션에 의존하는 메서드를 호출하나요?

비고

리플렉션의 차이와 데스크톱 앱 및 .NET 네이티브의 메타데이터 가용성에서 비롯된 문제 처리에 대한 자세한 내용은 리플렉션을 사용하는 API를 참조하세요.

앱을 테스트할 때 발생하는 예외 및 기타 문제를 처리하는 몇 가지 구체적인 예제는 다음을 참조하세요.

참고하십시오