Environment.GetCommandLineArgs()[0] mantiene il nome di invocazione di apphost

Quando si avvia un'app tramite il relativo apphost, Environment.GetCommandLineArgs() ora mantiene il nome di invocazione, incluso un percorso relativo o un nome di collegamento simbolico. Il comportamento per dotnet <application.dll> è invariato.

Versione introdotta

.NET 11 Preview 7

Comportamento precedente

In precedenza, quando veniva avviata un'app tramite il relativo apphost, Environment.GetCommandLineArgs()[0] restituiva il percorso dell'assembly gestito o il percorso eseguibile risolto, anziché il nome di invocazione.

Nuovo comportamento

A partire da .NET 11, quando si avvia un'app tramite il relativo apphost, Environment.GetCommandLineArgs()[0] mantiene il nome di invocazione, inclusi i percorsi relativi e i nomi di collegamento simbolico. Ad esempio, se special_myapp è un collegamento simbolico a myappe si esegue ./special_myapp, il valore è ./special_myapp.

Quando si avvia un'app con dotnet <application.dll>, il comportamento rimane invariato.

Tipo di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

Per allineare .NET al comportamento del processo nativo, il runtime preserva ora il valore di argv[0] fornito all'avvio. Questo comportamento consente anche a un'app di distinguere quale nome di collegamento simbolico l'ha avviata.

Per ottenere il percorso eseguibile, usare Environment.ProcessPath. Per ottenere il percorso dell'assembly di avvio gestito, usare Assembly.GetEntryAssembly()?.Location (vedere Assembly.GetEntryAssembly() e Assembly.Location). La posizione è una stringa vuota per gli assembly in bundle nelle app a file singolo. Continuare a usare Environment.GetCommandLineArgs()[0] quando è necessario il nome di invocazione.

Le API interessate