Environment.GetCommandLineArgs()[0] conserva el nombre de invocación de apphost.

Al iniciar una aplicación a través de su apphost, Environment.GetCommandLineArgs() ahora conserva el nombre de invocación, incluida una ruta de acceso relativa o un nombre de vínculo simbólico. El comportamiento de dotnet <application.dll> no cambia.

Versión introducida

.NET 11 Preview 7

Comportamiento anterior

Anteriormente, al iniciar una aplicación a través de su apphost, Environment.GetCommandLineArgs()[0] devolvía la ruta de acceso del ensamblado administrado o la ruta de acceso ejecutable resuelta, en lugar del nombre de invocación.

Nuevo comportamiento

A partir de .NET 11, al iniciar una aplicación a través de su apphost, Environment.GetCommandLineArgs()[0] conserva el nombre usado para invocar la aplicación, incluidas las rutas de acceso relativas y los nombres de vínculo simbólico. Por ejemplo, si special_myapp es un vínculo simbólico a myapp, y ejecutas ./special_myapp, el valor es ./special_myapp.

Al iniciar una aplicación con dotnet <application.dll>, el comportamiento no cambia.

Tipo de cambio disruptivo

Este es un cambio de comportamiento.

Motivo del cambio

Para alinear .NET con el comportamiento del proceso nativo, el tiempo de ejecución ahora conserva el valor de argv[0] proporcionado al iniciarse. Este comportamiento también permite a una aplicación distinguir qué nombre de vínculo simbólico lo inició.

Para obtener la ruta de acceso ejecutable, use Environment.ProcessPath. Para obtener la ubicación del ensamblado de entrada administrado, use Assembly.GetEntryAssembly()?.Location (vea Assembly.GetEntryAssembly() y Assembly.Location). La ubicación es una cadena vacía para los ensamblados agrupados en aplicaciones de un solo archivo. Siga usando Environment.GetCommandLineArgs()[0] cuando necesite el nombre de invocación.

Las APIs afectadas