Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Tidigare, i .NET-program med en fil, lades katalogen för den körbara filen till i NATIVE_DLL_SEARCH_DIRECTORIES egenskapen under starten. Därför har .NET alltid avsökt programkatalogen när ohanterade bibliotek lästes in. I icke-Windows med NativeAOTrpath var den inställd på programkatalogen som standard, så att den också alltid letade efter interna bibliotek i programkatalogen.
Programkatalogen läggs inte längre till NATIVE_DLL_SEARCH_DIRECTORIES i appar med en fil och inställningen rpath har tagits bort i NativeAOT. I båda fallen DllImportSearchPath.AssemblyDirectory innebär (ingår i standardbeteendet för P/Invokes) programkatalogen. Om du anger det värdet eller lämnar standardvärdet letar .NET efter i programkatalogen. Om du anger flaggor utan det värdet ser .NET inte längre ut i programkatalogen.
Version lanserad
.NET 10
Tidigare beteende
Tidigare tittade enfilsprogram alltid i programkatalogen när de läste in inbyggda bibliotek. På icke-Windows-operativsystem tittade NativeAOT-program alltid i programkatalogen när interna bibliotek lästes in.
Följande P/Invoke tittade till exempel i programkatalogen efter lib och läste in det därifrån om det fanns:
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
static extern void Method()
Nytt beteende
Från och med .NET 10 tittar enfils-program bara i programkatalogen om sökvägarna för en inbyggd biblioteksinladdning indikerar att sammansättningskatalogen ingår.
// Look in System32 on Windows.
// Search the OS on non-Windows.
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
static extern void Method()
// Look next to the single-file app because assembly directory
// means application directory for single-file apps.
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)]
static extern void Method()
// Look next to the single-file app (because assembly
// directory is searched by default), then default OS search.
[DllImport("lib")
static extern void Method()
Typ av brytande ändring
Det här är en beteendeförändring.
Orsak till ändring
Det befintliga beteendet (leta alltid i programkatalogen även om sökvägar utesluter det) har orsakat förvirring. Det är också oförenligt med hur sökflaggor hanteras i vanliga .NET-program (inte en enda fil, icke-NativeAOT).
Rekommenderad åtgärd
Om program-/sammansättningskatalogen är önskad för en P/Invoke- eller intern biblioteksbelastning och inte tidigare angavs anger du DllImportSearchPath.AssemblyDirectory.
Om inställningen RPATH önskas i NativeAOT lägger du uttryckligen till motsvarande länkargument i projektet.
Berörda API:er
- P/Invokes
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad