Изменения в поведении API, связанные со сборкой, для формата публикации с одним файлом

Изменилось поведение нескольких интерфейсов API, связанных с расположением файла сборки, когда они вызываются в формате публикации с одним файлом.

Описание изменения

В публикации с одним файлом для .NET 5 и более поздних версий упакованные сборки загружаются из памяти, а не извлекаются на диск. Для приложений, опубликованных в одном файле, это означает, что определенные интерфейсы API, связанные с расположением, возвращают в .NET 5 и более поздних версиях другие значения по сравнению с предыдущими версиями .NET. Изменения заключается в следующем.

API предыдущих версий .NET 5 и более поздней версии
Assembly.Location Возвращает путь к извлеченному файлу DLL Возвращает пустую строку для упакованных сборок
Assembly.CodeBase Возвращает путь к извлеченному файлу DLL Вызывает исключение для упакованных сборок
Assembly.GetFile(String) Возвращает null для упакованных сборок Вызывает исключение для упакованных сборок
Environment.GetCommandLineArgs()[0] Значением является имя точки входа библиотеки DLL Значением является имя исполняемого файла узла
AppContext.BaseDirectory Значением является временный каталог извлечения Значением является каталог, содержащий исполняемый файл узла

Представленные версии

5,0

Избегайте зависимостей от расположения файлов сборок при публикации в виде одного файла.

Затронутые API