多次遇到获取命令行参数的问题,研究并做了记录。
研究
新建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
结论
结论如下:
- 各种场景下,Environment获取到的命令行参数都比Main的args要多一个dll参数。
- 直接运行exe,跟dotnet命令运行dll,Main的args都一样,两种情况的Environment获取参数也一样。