Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yerel kod birlikte çalışma, yönetilen koddan yönetilmeyen kitaplıklara erişmenize veya yönetilen kitaplıkları yönetilmeyen koda (ters yönde) sunmanıza olanak tanıyan bir teknolojidir.
Yerel kod birlikte çalışması Yerel AOT ve AOT dışı dağıtımlarda benzer şekilde çalışsa da, Yerel AOT olarak yayımlanırken farklılık gösteren bazı özel öğeler vardır.
Direct P/Invoke çağrıları
AOT derlenmiş ikili dosyalardaki P/Invoke çağrıları, daha iyi uyumluluk için varsayılan olarak çalışma zamanında gevşek olarak bağlanır. AOT derleyicisini, işletim sistemiyle birlikte gelen dinamik yükleyici tarafından başlatma sırasında bağlanan seçili P/Invoke yöntemleri için doğrudan çağrılar oluşturacak şekilde yapılandırabilirsiniz. Doğrudan çağrılar aracılığıyla başvuruda bulunulan yönetilmeyen kitaplıklar ve giriş noktaları her zaman çalışma zamanında kullanılabilir olmalıdır, aksi takdirde yerel ikili başlatılamaz.
Doğrudan P/Invoke çağrılarının avantajları şunlardır:
- Daha iyi kararlı durum performansına sahiptirler.
- Yönetilmeyen bağımlılıkları statik olarak bağlamayı mümkün hale getirir.
Proje dosyasındaki öğeleri kullanarak <DirectPInvoke>
doğrudan P/Invoke oluşturmayı yapılandırabilirsiniz. Öğe adı, modüldeki tüm giriş noktaları için doğrudan çağrıları etkinleştiren modulename> veya <yalnızca belirli bir modül ve giriş noktası için doğrudan çağrı sağlayan modulename!entrypointname> olabilir.<
Dış dosyadaki giriş noktalarının listesini belirtmek için proje dosyasındaki öğeleri kullanın <DirectPInvokeList>
. Bir liste, doğrudan P/Invoke çağrılarının sayısı büyük olduğunda ve bunları tek tek <DirectPInvoke>
öğeleri kullanarak belirtmek pratik olmadığında kullanışlıdır. Dosya ile başlayan #
boş satırlar ve açıklamalar içerebilir.
Örnekler:
<ItemGroup>
<!-- Generate direct PInvoke calls for everything in __Internal -->
<!-- This option replicates Mono AOT behavior that generates direct PInvoke calls for __Internal -->
<DirectPInvoke Include="__Internal" />
<!-- Generate direct PInvoke calls for everything in libc (also matches libc.so on Linux or libc.dylib on macOS) -->
<DirectPInvoke Include="libc" />
<!-- Generate direct PInvoke calls for Sleep in kernel32 (also matches kernel32.dll on Windows) -->
<DirectPInvoke Include="kernel32!Sleep" />
<!-- Generate direct PInvoke for all APIs listed in DirectXAPIs.txt -->
<DirectPInvokeList Include="DirectXAPIs.txt" />
</ItemGroup>
Windows'da Yerel AOT, Windows'un desteklenen tüm sürümlerinde kullanılabilen doğrudan P/Invoke yöntemlerinin önceden doldurulmuş bir listesini kullanır.
Uyarı
Doğrudan P/Invoke yöntemleri Yerel AOT çalışma zamanı kitaplığı tarafından değil, işletim sistemi dinamik yükleyicisi tarafından çözümlendiğinden, doğrudan P/Invoke yöntemleri öğesine DefaultDllImportSearchPathsAttributesaygı duymayacaktır. Kitaplık arama sırası, işletim sistemi tarafından tanımlanan dinamik yükleyici kurallarına uyar. Bazı işletim sistemleri ve yükleyiciler bağlayıcı bayrakları aracılığıyla (Windows veya -rpath
Linux gibi/DEPENDENTLOADFLAG
) dinamik yüklemeyi denetlemenin yollarını sunar. Bağlayıcı bayraklarını belirtme hakkında daha fazla bilgi için Bağlama bölümüne bakın.
Bağlama
Yönetilmeyen bir kitaplığa statik olarak bağlanmak için Windows'ta bir .lib
dosyaya ve Unix benzeri sistemlerde bir dosyaya işaret eden bir .a
dosya belirtmeniz <NativeLibrary Include="filename" />
gerekir.
Örnekler:
<ItemGroup>
<!-- Generate direct PInvokes for Dependency -->
<DirectPInvoke Include="Dependency" />
<!-- Specify library to link against -->
<NativeLibrary Include="Dependency.lib" Condition="$(RuntimeIdentifier.StartsWith('win'))" />
<NativeLibrary Include="Dependency.a" Condition="!$(RuntimeIdentifier.StartsWith('win'))" />
</ItemGroup>
Yerel bağlayıcıya ek bayraklar belirtmek için öğesini kullanın <LinkerArg>
.
Örnekler:
<ItemGroup>
<!-- link.exe is used as the linker on Windows -->
<LinkerArg Include="/DEPENDENTLOADFLAG:0x800" Condition="$(RuntimeIdentifier.StartsWith('win'))" />
<!-- Native AOT invokes clang/gcc as the linker, so arguments need to be prefixed with "-Wl," -->
<LinkerArg Include="-Wl,-rpath,'/bin/'" Condition="$(RuntimeIdentifier.StartsWith('linux'))" />
</ItemGroup>
Yerel dışarı aktarmalar
Yerel AOT derleyicisi, genel C giriş noktaları olarak boş EntryPoint
bir özellik ile UnmanagedCallersOnlyAttribute ek açıklamalı yöntemleri dışarı aktarır. Bu, AOT derlenmiş modüllerin dış programlara dinamik veya statik olarak bağlanmasını mümkün kılar. Yalnızca yayımlanan derlemede işaretlenen UnmanagedCallersOnly
yöntemler dikkate alınır. Proje başvurularındaki veya NuGet paketlerindeki yöntemler dışarı aktarılamaz.
Daha fazla bilgi için bkz . NativeLibrary örneği.