Environment.GetCommandLineArgs()[0] behoudt de aanroepnaam van de apphost

Wanneer u een app start via de apphost, blijft met Environment.GetCommandLineArgs() de aanroepnaam nu behouden, inclusief een relatief pad of symlinknaam. Het gedrag voor dotnet <application.dll> is ongewijzigd.

Geïntroduceerde versie

.NET 11 preview 7

Vorig gedrag

Eerder, toen u een app via de apphost startte, retourneerde Environment.GetCommandLineArgs()[0] het beheerde assemblypad of het opgeloste uitvoerbare pad, in plaats van de naam van de aanroep.

Nieuw gedrag

Wanneer u vanaf .NET 11 een app start via de apphost, behoudt Environment.GetCommandLineArgs()[0] de aanroepnaam, inclusief relatieve paden en symlinknamen. Als special_myapp bijvoorbeeld een symlink naar myapp is en u ./special_myapp uitvoert, is ./special_myapp de waarde.

Wanneer u een app met dotnet <application.dll> start, blijft het gedrag ongewijzigd.

Type van brekende verandering

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Om .NET af te stemmen op systeemeigen procesgedrag, behoudt de runtime nu de waarde van argv[0] die bij het starten is opgegeven. Met dit gedrag kan een app ook onderscheiden met welke symlinknaam deze is gestart.

Als u het uitvoerbare pad wilt ophalen, gebruikt u Environment.ProcessPath. Als u de locatie van de beheerde invoerassembly wilt ophalen, gebruikt u Assembly.GetEntryAssembly()?.Location (zie Assembly.GetEntryAssembly() en Assembly.Location). De locatie is een lege tekenreeks voor gebundelde assembly's in apps met één bestand. Blijf Environment.GetCommandLineArgs()[0] gebruiken wanneer u de aanroepnaam nodig hebt.

Betreffende API's