Environment.GetCommandLineArgs()[0] は apphost 呼び出し名を保持します

apphost を使用してアプリを起動すると、 Environment.GetCommandLineArgs() は相対パスやシンボリック リンク名を含む呼び出し名を保持するようになりました。 dotnet <application.dll>の動作は変わりません。

導入されたバージョン

.NET 11 Preview 7

以前の動作

以前は、apphost を使用してアプリを起動したときに、 Environment.GetCommandLineArgs()[0] は呼び出し名ではなく、マネージド アセンブリ パスまたは解決された実行可能パスを返しました。

新しい動作

.NET 11 以降、apphost を使用してアプリを起動すると、Environment.GetCommandLineArgs()[0]は、相対パスやシンボリック リンク名などの呼び出し名を保持します。 たとえば、special_myapp が myapp へのシンボリック リンクであり、./special_myapp を実行する場合、値は ./special_myapp です。

dotnet <application.dll>を使用してアプリを起動すると、動作は変更されません。

破壊的変更の種類

この変更は 動作の変更です。

変更理由

.NETをネイティブ プロセスの動作に合わせるために、実行時に指定されたargv[0]の値が保持されるようになりました。 この動作により、どのシンボリック リンク名でアプリが起動されたかを区別することもできます。

実行可能ファイルのパスを取得するには、 Environment.ProcessPathを使用します。 マネージド エントリ アセンブリの場所を取得するには、 Assembly.GetEntryAssembly()?.Location を使用します ( Assembly.GetEntryAssembly() と Assembly.Locationを参照)。 場所は、単一ファイル アプリ内のバンドルされたアセンブリでは空の文字列になります。 呼び出し名が必要な場合は、Environment.GetCommandLineArgs()[0] を使い続けてください。

影響を受ける API