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
[…]/{…}
)管理。我很想知道.Netargs
解析器是如何工作的(该解析器基本上是在应用程序入口点填充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许可证下方便地获得: