Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ранее в однофайловых приложениях .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