При переходе от DllImportAttribute к LibraryImportAttribute , как описано в Генерация исходного кода для вызовов платформы , я наткнулся на DefaultDllImportSearchPathsAttribute, который определяет пути, используемые для поиска DLL.
Предполагая, что у меня есть следующий импорт DLL:
[DllImport("user32.dll")]
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
обновлен до
[LibraryImport("user32.dll")]
[DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
private static partial bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
, будет ли путь поиска также обрабатываться LibraryImportAttribute, как это делалось раньше?





Как уже говорилось в комментариях, ответ — да,
DefaultDllImportSearchPaths также будет обрабатываться LibraryImport.
Это можно увидеть в исходном коде .NET, где LibraryImportGenerator.cs обрабатывает DllImportSearchPathsAttribute. Декомпиляция и тестирование с использованием минимального образца исполняемого файла также подтверждает это.
Да, это можно увидеть с помощью декомпилятора (например, ILSpy). Генератор исходного кода передает атрибут DefaultDllImportSearchPaths в метод с атрибутом DllImport. Не следует делать этого для библиотек WinAPI, ОС должна сама определить, как загружать dll из system32 или syswow64. Также обратите внимание на новые правила маршалинга bool. Вы можете рассмотреть возможность использования этого для целевых платформ, требующих AOT, например iOS.