Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Dříve se v aplikacích .NET s jedním souborem přidal do vlastnosti během spouštění adresář spustitelného souboru s jedním souborem NATIVE_DLL_SEARCH_DIRECTORIES . Proto .NET při načtení nespravovaných knihoven vždy vyhodnotil adresář aplikace. V jiných systémech než Windows s NativeAOTrpath byla ve výchozím nastavení nastavena na adresář aplikace, aby se v adresáři aplikace vždy hledaly nativní knihovny.
Adresář aplikace již není přidáván do NATIVE_DLL_SEARCH_DIRECTORIES u jednosouborových aplikací a nastavení rpath bylo v NativeAOT odstraněno. V obou případech ( DllImportSearchPath.AssemblyDirectory zahrnuté do výchozího chování P/Invokes) znamená adresář aplikace. Pokud tuto hodnotu zadáte nebo ponecháte výchozí hodnotu, bude .NET vypadat v adresáři aplikace. Pokud zadáte příznaky bez této hodnoty, rozhraní .NET už nebude v adresáři aplikace vypadat.
Verze byla představena
.NET 10
Předchozí chování
Dříve aplikace s jediným souborem při načítání nativních knihoven vždy hledaly v adresáři aplikace. V operačních systémech jiných než Windows se aplikace NativeAOT při načítání nativních knihoven vždy podívaly do adresáře aplikací.
Například následující volání nespravovaného kódu hledalo v adresářilib aplikace a načetlo ho odtud, pokud existovalo:
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
static extern void Method()
Nové chování
Od verze .NET 10 jednosouborové aplikace vyhledávají pouze v adresáři aplikace, pokud cesty pro nahrávání nativní knihovny označují zahrnutí adresáře sestavení.
// 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 zásadní změny
Jedná se o změnu chování.
Důvod změny
Stávající chování (vždy nahlíží do adresáře aplikace, i když jsou cesty hledání vyloučeny) způsobilo nejasnosti. Je také nekonzistentní s tím, jak jsou příznaky vyhledávání zpracovávány v běžných (ne jedno-souborových a ne NativeAOT) aplikacích .NET.
Doporučená akce
Pokud je pro načtení P/Invoke nebo nativní knihovny požadovaný adresář aplikace nebo sestavení a nebyl zadán dříve, zadejte DllImportSearchPath.AssemblyDirectory.
RPATH Pokud je nastavení požadované v NativeAOT, explicitně přidejte do projektu odpovídající argumenty linkeru.
Ovlivněná rozhraní API
- P/Invoke (proces volání funkcí nespravovaného kódu)
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad