Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Ранее в однофайловых приложениях .NET каталог однофайловых исполняемых файлов был добавлен в NATIVE_DLL_SEARCH_DIRECTORIES свойство во время запуска. Следовательно, .NET всегда пробовал каталог приложений при загрузке неуправляемых библиотек. На операционных системах, отличных от Windows, с NativeAOT, параметр rpath был установлен в каталог приложения по умолчанию, таким образом, что он всегда искал собственные библиотеки в каталоге приложения.
Каталог приложений больше не добавляется в однофайловые NATIVE_DLL_SEARCH_DIRECTORIES приложения, а rpath параметр удален в NativeAOT. В обоих случаях DllImportSearchPath.AssemblyDirectory (включено в поведение по умолчанию для P/Invokes) означает каталог приложения. Если указать это значение или оставить значение по умолчанию, .NET выглядит в каталоге приложения. Если вы указываете флаги без этого значения, .NET больше не будет выглядеть в каталоге приложения.
Представленная версия
.NET 10
Предыдущее поведение
Ранее однофайловые приложения всегда искали в каталоге приложений при загрузке нативных библиотек. В операционных системах, отличных от Windows, приложения NativeAOT всегда искали в каталоге приложений при загрузке нативных библиотек.
Например, следующий P/Invoke искал в каталоге приложенияlib, и загружал его оттуда, если он существовал.
[DllImport("lib")
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
static extern void Method()
Новое поведение
Начиная с .NET 10, однофайловые приложения будут проверять только директорию приложения, если пути поиска для загрузки нативной библиотеки указывают на включение директории сборок.
// 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()
Тип разрушающего изменения
Причина изменения
Существующее поведение (всегда искать в каталоге приложений, даже если пути поиска исключают его), вызвало путаницу. Кроме того, он не согласуется с тем, как флаги поиска обрабатываются в обычных приложениях .NET (не однофайловых, отличных от NativeAOT).
Рекомендуемое действие
Если каталог приложения или сборки необходим для загрузки P/Invoke или собственной библиотеки и не указан ранее, укажите DllImportSearchPath.AssemblyDirectory.
RPATH Если параметр требуется в NativeAOT, явно добавьте соответствующие аргументы компоновщика в проект.
Затронутые API
- P/Invokes
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad