Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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