多次遇到获取命令行参数的问题,研究并做了记录。

研究

新建net9控制台项目,代码如下:

var gs = args;
XTrace.WriteLine("args[{0}]: {1}", gs.Length, gs.Join(" "));

gs = Environment.GetCommandLineArgs();
XTrace.WriteLine("args[{0}]: {1}", gs.Length, gs.Join(" "));

编译后,直接运行 Project3.exe ,输出:

args[0]:
args[1]: D:\Test\Project3\Bin\Console\Project3.dll

带上参数,运行 Project3.exe -name stone,输出:

args[2]: -name stone
args[3]: D:\Test\Project3\Bin\Console\Project3.dll -name stone

使用dotnet命令运行 dotnet .\Project3.dll -name stone ,输出:

args[2]: -name stone
args[3]: D:\Test\Project3\Bin\Console\Project3.dll -name stone

在Linux中运行 ubuntu@BJ01:~/test333$ dotnet Project3.dll -name stone ,输出:

args[2]: -name stone
args[3]: /home/ubuntu/test333/Project3.dll -name stone

结论

结论如下:

  1. 各种场景下,Environment获取到的命令行参数都比Main的args要多一个dll参数。
  2. 直接运行exe,跟dotnet命令运行dll,Main的args都一样,两种情况的Environment获取参数也一样。