Environment.GetCommandLineArgs()[0] behält den Namen des apphost-Aufrufs bei

Wenn Sie eine App über den apphost starten, Environment.GetCommandLineArgs() wird nun der Aufrufname beibehalten, einschließlich eines relativen Pfads oder symlink-Namens. Das Verhalten für dotnet <application.dll> ist unverändert.

Eingeführt in Version

.NET 11 Vorschau 7

Bisheriges Verhalten

Wenn Sie zuvor eine App über ihren apphost gestartet haben, gab Environment.GetCommandLineArgs()[0] den verwalteten Assemblypfad oder den aufgelösten ausführbaren Pfad statt des Aufrufnamens zurück.

Neues Verhalten

Ab .NET 11 bewahrt Environment.GetCommandLineArgs()[0] beim Starten einer App über den apphost den Aufrufnamen, einschließlich relativer Pfade und Symlinknamen. Wenn special_myapp z. B. ein Symlink zu myapp ist und Sie ./special_myapp ausführen, ist der Wert ./special_myapp.

Wenn Sie eine App mit dotnet <application.dll> starten, ist das Verhalten unverändert.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Um .NET mit dem systemeigenen Prozessverhalten auszurichten, behält die Laufzeit jetzt den beim Start bereitgestellten Wert von argv[0] bei. Mit diesem Verhalten kann eine App auch unterscheiden, welcher Symlinkname sie gestartet hat.

Um den ausführbaren Pfad abzurufen, verwenden Sie Environment.ProcessPath. Verwenden Sie Assembly.GetEntryAssembly()?.Location zum Abrufen des Speicherorts der Assembly mit verwaltetem Einstiegspunkt (siehe Assembly.GetEntryAssembly() und Assembly.Location). Der Speicherort ist eine leere Zeichenfolge für gebündelte Assemblys in Einzeldatei-Apps. Environment.GetCommandLineArgs()[0] Verwenden Sie weiterhin, wenn Sie den Aufrufnamen benötigen.

Betroffene APIs