Environment.GetCommandLineArgs()[0] zachowuje nazwę wywołania apphost

Po uruchomieniu aplikacji za pośrednictwem hosta apphost Environment.GetCommandLineArgs() zachowuje teraz nazwę wywołania, w tym ścieżkę względną lub nazwę dowiązania symbolicznego. Zachowanie dla dotnet <application.dll> pozostaje bez zmian.

Wersja wprowadzona

.NET 11 (wersja zapoznawcza 7)

Poprzednie zachowanie

Wcześniej po uruchomieniu aplikacji za pośrednictwem hosta apphost Environment.GetCommandLineArgs()[0] zwracana była ścieżka zarządzanego zestawu lub rozpoznana ścieżka pliku wykonywalnego, a nie nazwa wywołania.

Nowe zachowanie

Począwszy od .NET 11, gdy uruchamiasz aplikację za pośrednictwem jej hosta apphost, Environment.GetCommandLineArgs()[0] zachowuje nazwę wywołania, w tym ścieżki względne i nazwy sylinków. Jeśli na przykład special_myapp jest dowiązaniem symbolicznym do myapp, i uruchomisz ./special_myapp, wartość to ./special_myapp.

Po uruchomieniu aplikacji za pomocą dotnet <application.dll> zachowanie nie zmienia się.

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Aby dopasować .NET do natywnego zachowania procesu, środowisko uruchomieniowe zachowuje teraz wartość argv[0] podaną podczas uruchamiania. To zachowanie pozwala również aplikacji odróżnić, która nazwa dowiązania symbolicznego została użyta do jej uruchomienia.

Aby uzyskać ścieżkę do pliku wykonywalnego, użyj polecenia Environment.ProcessPath. Aby uzyskać lokalizację zarządzanego zestawu wejściowego, użyj polecenia Assembly.GetEntryAssembly()?.Location (zobacz Assembly.GetEntryAssembly() i Assembly.Location). Lokalizacja jest pustym ciągiem dla dołączonych zestawów w aplikacjach jednoplikowych. Nadal używaj Environment.GetCommandLineArgs()[0], gdy potrzebujesz nazwy wywołania.

Interfejsy API, których dotyczy problem