Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net应用程序加载器';s命令行解析器_C#_.net - Fatal编程技术网

C# .Net应用程序加载器';s命令行解析器

C# .Net应用程序加载器';s命令行解析器,c#,.net,C#,.net,我最近在研究一个通用解析器,并开始了折叠([…]/{…})管理。我很想知道.Netargs解析器是如何工作的(该解析器基本上是在应用程序入口点填充args数组) 我开始查找CLR(mscorlib.dll),但没有找到要查找的内容,所以我的问题是,使用什么机制来解析这些参数,如果是CLR类型,它是哪一种,或者如果它是一个未管理的P/Invoke调用,则声明它。这是控制台应用程序的main函数中的调用堆栈: Program.Main(string[] args = {string[0]}) Lin

我最近在研究一个通用解析器,并开始了折叠(
[…]/{…}
)管理。我很想知道.Net
args
解析器是如何工作的(该解析器基本上是在应用程序入口点填充
args
数组)


我开始查找
CLR
mscorlib.dll
),但没有找到要查找的内容,所以我的问题是,使用什么机制来解析这些参数,如果是CLR类型,它是哪一种,或者如果它是一个未管理的P/Invoke调用,则声明它。

这是控制台应用程序的

main
函数中的调用堆栈:

Program.Main(string[] args = {string[0]}) Line 18 + 0x5 bytes   C#
mscoreei.dll!6f79f5a3()     
mscoree.dll!70bc7f16()  
mscoree.dll!70bc4de3()  
kernel32.dll!76f03677()     
ntdll.dll!77c09d72()    
ntdll.dll!77c09d45()    
至少可以从本机代码直接调用
main(字符串[])

我仍然不确定解析是否也发生在本机代码中,可能它是一个托管函数,在
main
之前调用过

.NET framework可能会调用Windows API


有两个函数:GetCommandLine()和CommandLineToArgvW(),可用于获取和解析命令行。

Microsoft最近发布了的源代码,所以我们可以看一下

它包含一个类
Microsoft.CodeAnalysis.CommandLineParser
,该类带有一个
SplitCommandLineIntoArguments
方法,描述如下:

/// <summary>
/// Split a command line by the same rules as Main would get the commands.
/// </summary>
/// <remarks>
/// Rules for command line parsing, according to MSDN:
/// ...
/// </remarks>
//
///按Main将获得命令的相同规则拆分命令行。
/// 
/// 
///根据MSDN,命令行解析规则:
/// ...
/// 
下面是
args
解析器的完整C#实现,可以在Apache许可证下方便地获得:


答案很好,虽然不是我想要的,但正是我想要的。