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

Quando você inicia um aplicativo por meio de seu apphost, Environment.GetCommandLineArgs() agora preserva o nome da invocação, incluindo um caminho relativo ou um nome de symlink. O comportamento de dotnet <application.dll> permanece inalterado.

Versão introduzida

.NET 11 Versão Prévia 7

Comportamento anterior

Anteriormente, quando você iniciou um aplicativo por meio de seu apphost, Environment.GetCommandLineArgs()[0] retornou o caminho do assembly gerenciado ou o caminho executável resolvido, em vez do nome da invocação.

Novo comportamento

A partir do .NET 11, quando você inicia um aplicativo por meio de seu apphost, Environment.GetCommandLineArgs()[0] preserva o nome da invocação, incluindo caminhos relativos e nomes de symlink. Por exemplo, se special_myapp for um symlink para myapp, e você executar ./special_myapp, o valor será ./special_myapp.

Quando você inicia um aplicativo com dotnet <application.dll>, o comportamento é inalterado.

Tipo de mudança disruptiva

Esta é uma alteração comportamental.

Motivo da alteração

Para alinhar .NET com o comportamento do processo nativo, o runtime agora preserva o valor de argv[0] fornecido na inicialização. Esse comportamento também permite que um aplicativo distinga qual nome de symlink o iniciou.

Para obter o caminho executável, use Environment.ProcessPath. Para obter o local do assembly de entrada gerenciado, use Assembly.GetEntryAssembly()?.Location (consulte Assembly.GetEntryAssembly() e Assembly.Location). A localização é uma cadeia de caracteres vazia para assemblies agrupados em aplicativos de arquivo único. Continue usando Environment.GetCommandLineArgs()[0] quando precisar do nome da invocação.

APIs afetadas