Environment.GetCommandLineArgs()[0] сохраняет имя вызова apphost

При запуске приложения через его apphost теперь сохраняется имя вызова, Environment.GetCommandLineArgs() включая относительный путь или имя symlink. Поведение dotnet <application.dll> не изменилось.

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

.NET 11 предварительная версия 7

Предыдущее поведение

Ранее при запуске приложения через его apphost значение Environment.GetCommandLineArgs()[0] возвращало путь к управляемой сборке или разрешенный путь к исполняемому файлу, а не имя вызова.

Новое поведение

Начиная с .NET 11, при запуске приложения через его apphost Environment.GetCommandLineArgs()[0] сохраняет имя вызова, включая относительные пути и имена символических ссылок. Например, если special_myapp — символьная ссылка на myapp, и вы выполняете ./special_myapp, значение равно ./special_myapp.

При запуске приложения с помощью dotnet <application.dll> поведение не изменяется.

Тип разрушающего изменения

Это изменение поведения.

Причина изменения

Чтобы привести .NET в соответствие с поведением нативного процесса, среда выполнения теперь сохраняет значение argv[0], предоставленное при запуске. Это поведение также позволяет приложению различать, под каким именем символической ссылки оно было запущено.

Чтобы получить путь к исполняемому файлу, используйте Environment.ProcessPath. Чтобы получить расположение управляемой входной сборки, используйте Assembly.GetEntryAssembly()?.Location (см. Assembly.GetEntryAssembly() и Assembly.Location). Расположение — пустая строка для встроенных сборок в однофайловых приложениях. Продолжайте использовать Environment.GetCommandLineArgs()[0], когда вам нужно имя вызова.

Затронутые API