Environment.GetCommandLineArgs()[0] preserva o nome de invocação do apphost

Quando inicia uma aplicação através do seu apphost, Environment.GetCommandLineArgs() agora preserva o nome da invocação, incluindo um caminho relativo ou nome do symlink. O comportamento para dotnet <application.dll> mantém-se inalterado.

Versão introduzida

.NET 11 Pré-visualização 7

Comportamento anterior

Anteriormente, ao iniciar uma aplicação através do respetivo apphost, Environment.GetCommandLineArgs()[0] devolvia o caminho do assembly gerido ou o caminho do executável resolvido, em vez do nome da invocação.

Novo comportamento

A partir do .NET 11, ao iniciar uma aplicação através do seu apphost, Environment.GetCommandLineArgs()[0] preserva o nome da invocação, incluindo caminhos relativos e nomes de symlinks. Por exemplo, se special_myapp for um symlink para myapp, e executares ./special_myapp, o valor é ./special_myapp.

Quando inicias uma aplicação com dotnet <application.dll>, o comportamento mantém-se inalterado.

Tipo de mudança disruptiva

Esta mudança é uma mudança comportamental.

Motivo da mudança

Para alinhar o .NET com o comportamento nativo dos processos, o runtime preserva agora o valor de argv[0] fornecido aquando do arranque. Este comportamento também permite a uma aplicação distinguir qual o nome do symlink que o lançou.

Para obter o caminho do executável, use Environment.ProcessPath. Para obter a localização do assembly de entrada gerido, use Assembly.GetEntryAssembly()?.Location (ver Assembly.GetEntryAssembly() e Assembly.Location). A localização é uma cadeia vazia para assemblies agrupados em aplicações de ficheiro único. Continua a usar Environment.GetCommandLineArgs()[0] quando precisares do nome da invocação.

APIs afetadas