.NET 포함 제한 사항.NET Embedding Limitations

이 문서에서는 .NET 포함의 제한 사항에 대해 설명 하 고 가능한 경우이에 대 한 해결 방법을 제공 합니다.This document explains the limitations of .NET Embedding and, whenever possible, provides workarounds for them.

일반General

프로젝트에 포함 된 라이브러리를 둘 이상 사용Use more than one embedded library in a project

동일한 응용 프로그램 내에 두 개의 Mono 런타임이 공동으로 존재 하는 것은 가능 하지 않습니다.It is not possible to have two Mono runtimes co-existing inside the same application. 즉, 동일한 응용 프로그램 내에서 두 개의 서로 다른 .NET 포함 생성 라이브러리를 사용할 수 없습니다.This means you cannot use two different .NET Embedding-generated libraries inside the same application.

해결 방법: 생성기를 사용 하 여 여러 프로젝트의 여러 어셈블리를 포함 하는 단일 라이브러리를 만들 수 있습니다.Workaround: You can use the generator to create a single library that includes several assemblies (from different projects).

서브클래싱하Subclassing

.NET 포함은 대상 언어 및 플랫폼에 대 한 바로 사용할 수 있는 Api 집합을 노출 하 여 응용 프로그램 내에서 Mono 런타임의 통합을 용이 하 게 합니다..NET Embedding eases the integration of the Mono runtime inside applications by exposing a set of ready-to-use APIs for the target language and platform.

그러나이는 양방향 통합이 아닙니다. 예를 들어 관리 되는 코드는이 공동 공존을 인식 하지 못하므로 관리 되는 형식을 하위 클래스로 지정할 수 없으며 관리 되는 코드가 네이티브 코드 내부에서 콜백 될 것으로 예측할 수 없습니다.However this is not a two-way integration, e.g. you cannot subclass a managed type and expect managed code to call back inside your native code, since your managed code is unaware of this co-existance.

사용자의 요구에 따라 이러한 제한의 일부를 해결할 수 있습니다 (예:).Depending on your needs, it might be possible to workaround parts of this limitation, e.g.

  • 관리 코드는 네이티브 코드에 p/invoke를 사용할 수 있습니다.your managed code can p/invoke into your native code. 이렇게 하려면 네이티브 코드의 사용자 지정을 허용 하도록 관리 코드를 사용자 지정 해야 합니다.This requires customizing your managed code to allow customization from native code;

  • Xamarin.ios와 같은 제품을 사용 하 여 관리 되는 라이브러리 (이 경우에는 관리 되는 NSObject 서브 클래스의 하위 클래스)를 제공 합니다.use products like Xamarin.iOS and expose a managed library that would allow Objective-C (in this case) to subclass some managed NSObject subclasses.

목표-C 생성 된 코드Objective-C generated code

여부가Nullability

.NET에는 null 참조를 사용할 수 있는지 여부를 나타내는 메타 데이터가 없으므로 API에 대 한 메타 데이터가 없습니다.There is no metadata in .NET that tell us if a null reference is acceptable or not for an API. 대부분의 Api는 null 인수를 처리할 수 없는 경우 ArgumentNullException를 throw 합니다.Most APIs will throw ArgumentNullException if they cannot cope with a null argument. 이것은 목표-C 예외를 처리 하는 것이 더 좋습니다.This is problematic as Objective-C handling of exceptions is something better avoided.

헤더 파일에서 정확한 null 허용 여부 주석을 생성할 수 없으며 관리 되는 예외를 최소화 하려는 경우 기본적으로 null이 아닌 인수 (NS_ASSUME_NONNULL_BEGIN)로 지정 하 고 전체 자릿수가 가능한 경우 null 허용 여부 주석을 추가 합니다.Since we cannot generate accurate nullability annotations in the header files and wish to minimize managed exceptions we default to non-null arguments (NS_ASSUME_NONNULL_BEGIN) and add some specific, when precision is possible, nullability annotations.

Bitcode (iOS)Bitcode (iOS)

현재 .NET 포함은 일부 Xcode 프로젝트 템플릿에 대해 사용 하도록 설정 된 iOS에서 bitcode를 지원 하지 않습니다.Currently .NET Embedding does not support bitcode on iOS, which is enabled for some Xcode project templates. 생성 된 프레임 워크를 성공적으로 연결 하려면이 기능을 사용 하지 않도록 설정 해야 합니다.This will have to be disabled to successfully link generated frameworks.

Bitcode 옵션