Aracılığıyla paylaş


RequiresDynamicCode olarak işaretlenmiş iç API'ler

Normal koşullarda, yerel AOT ile RequiresDynamicCodeAttribute yayımlanan bir uygulamada ek açıklama eklenen API'lerin çağrılması IL3050 uyarılarını tetikler (yerel AOT olarak yayımlarken 'RequiresDynamicCodeAttribute' ile açıklama eklenen üyeleri çağırmaktan kaçının).. Uyarıyı tetikleyen API'ler AOT derlemesi sonrasında düzgün çalışmayabilir.

RequiresDynamicCode ek açıklamalı bazı API'ler, belirli bir desende çağrıldığında uyarı tetiklenmeden kullanılabilir. Bir desenin parçası olarak kullanıldığında, API çağrısı derleyici tarafından statik olarak çözümlenebilir, uyarı oluşturmaz ve çalışma zamanında beklendiği gibi davranır.

Enum.GetValues(Tür) Yöntemi

Bu API'ye yapılan çağrılar, beton sabit listesi türü çağırma yöntemi gövdesinde statik olarak görünür durumdaysa bir uyarı tetiklemez. Örneğin, Enum.GetValues(typeof(AttributeTargets)) bir uyarı tetiklemez ve Enum.GetValues(typeof(T))Enum.GetValues(someType) tetikler.

Marshal.DestroyStructure(IntPtr, Type) Yöntemi

Bu API'ye yapılan çağrılar, beton türü çağırma yöntemi gövdesinde statik olarak görünür durumdaysa bir uyarı tetiklemez. Örneğin, Marshal.DestroyStructure(offs, typeof(bool)) bir uyarı tetiklemez ve Marshal.DestroyStructure(offs, typeof(T))Marshal.DestroyStructure(offs, someType) tetikler.

Marshal.GetDelegateForFunctionPointer(IntPtr, Type) Yöntemi

Bu API'ye yapılan çağrılar, beton türü çağırma yöntemi gövdesinde statik olarak görünür durumdaysa bir uyarı tetiklemez. Örneğin, Marshal.GetDelegateForFunctionPointer(ptr, typeof(bool)) bir uyarı tetiklemez ve Marshal.GetDelegateForFunctionPointer(ptr, typeof(T))Marshal.GetDelegateForFunctionPointer(ptr, someType) tetikler.

Marshal.OffsetOf(Tür, Dize) Yöntemi

Bu API'ye yapılan çağrılar, beton türü çağırma yöntemi gövdesinde statik olarak görünür durumdaysa bir uyarı tetiklemez. Örneğin, Marshal.OffsetOf(typeof(Point), someField) bir uyarı tetiklemez ve Marshal.OffsetOf(typeof(T), someField)Marshal.OffsetOf(someType, someField) tetikler.

Marshal.PtrToStructure(IntPtr, Tür) Yöntemi

Bu API'ye yapılan çağrılar, beton türü çağırma yöntemi gövdesinde statik olarak görünür durumdaysa bir uyarı tetiklemez. Örneğin, Marshal.PtrToStructure(offs, typeof(bool)) bir uyarı tetiklemez ve Marshal.PtrToStructure(offs, typeof(T))Marshal.PtrToStructure(offs, someType) tetikler.

Marshal.SizeOf(Type) Yöntemi

Bu API'ye yapılan çağrılar, beton türü çağırma yöntemi gövdesinde statik olarak görünür durumdaysa bir uyarı tetiklemez. Örneğin, Marshal.SizeOf(typeof(bool)) bir uyarı tetiklemez ve Marshal.SizeOf(typeof(T))Marshal.SizeOf(someType) tetikler.

MethodInfo.MakeGenericMethod(Type[]) Yöntemi (.NET 9+)

Hem genel yöntem tanımı hem de örnekleme bağımsız değişkenleri çağrı yöntemi gövdesinde statik olarak görünür durumdaysa, bu API'ye yapılan çağrılar bir uyarı tetiklemez. Örneğin, typeof(SomeType).GetMethod("GenericMethod").MakeGenericMethod(typeof(int)). Bağımsız değişken olarak genel bir parametre kullanmak da mümkündür: typeof(SomeType).GetMethod("GenericMethod").MakeGenericMethod(typeof(T)) ayrıca uyarmaz.

Genel tür tanımı çağırma yöntemi gövdesinde statik olarak görünüyorsa ve tüm genel parametreleri bir sınıf olacak şekilde kısıtlanmışsa, çağrı IL3050 uyarısını da tetiklemez. Bu durumda bağımsız değişkenlerin statik olarak görünür olması gerekmez. Örneğin:

// No IL3050 warning on MakeGenericMethod because T is constrained to be class
typeof(SomeType).GetMethod("GenericMethod").MakeGenericMethod(Type.GetType(Console.ReadLine()));
class SomeType
{
    public void GenericMethod<T>() where T : class { }
}

Bilinmeyen bir değere sahip veya someMethod.MakeGenericMethod(typeof(int)) gibi typeof(SomeType).GetMethod("GenericMethod").MakeGenericMethod(someType)someType diğer tüm durumlar bir uyarı tetikler.

Type.MakeGenericType(Type[]) Yöntemi (.NET 9+)

Hem genel tür tanımı hem de örnekleme bağımsız değişkenleri çağrı yöntemi gövdesinde statik olarak görünür durumdaysa, bu API'ye yapılan çağrılar bir uyarı tetiklemez. Örneğin, typeof(List<>).MakeGenericType(typeof(int)). Bağımsız değişken olarak genel bir parametre kullanmak da mümkündür: typeof(List<>).MakeGenericType(typeof(T)) ayrıca uyarmaz.

Genel tür tanımı çağırma yöntemi gövdesinde statik olarak görünüyorsa ve tüm genel parametreleri bir sınıf olacak şekilde kısıtlanmışsa, çağrı IL3050 uyarısını da tetiklemez. Bu durumda bağımsız değişkenlerin statik olarak görünür olması gerekmez. Örneğin:

// No IL3050 warning on MakeGenericType because T is constrained to be class
typeof(Generic<>).MakeGenericType(Type.GetType(Console.ReadLine()));
class Generic<T> where T : class { }

Bilinmeyen bir değere sahip veya someType.MakeGenericType(typeof(int)) gibi typeof(List<>).MakeGenericType(someType)someType diğer tüm durumlar bir uyarı tetikler.