.Net Application Loader的命令行解析器

时间:2014-07-16 22:04:18

标签: c# .net

我最近正在研究一个通用的解析器并且已经达到折叠([...] / {...})管理的程度我很想知道.Net args解析器是如何工作的(解析器本质上是填充的)应用程序入口点中的args数组。)

我开始环顾CLRmscorlib.dll),但没找到要找的东西,所以我的问题是用什么机制来解析这些参数,如果它是一个CLR类型它是一个,或者它是一个未被管理的P / Invoke调用,它被声明。

3 个答案:

答案 0 :(得分:2)

这是控制台应用程序的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(string[])。 我仍然不确定解析是否也发生在本机代码中,也许它是一个托管函数,它在main之前被调用。

答案 1 :(得分:2)

Microsoft最近发布了.NET Compiler Platform的源代码,所以我们可以看一下!

它包含一个Microsoft.CodeAnalysis.CommandLineParserSplitCommandLineIntoArguments方法,其描述如下:

/// <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>

所以这里是args解析器的完整C#实现,可以在Apache License下方便地使用:

答案 2 :(得分:0)

.NET框架可能会调用Windows API。

有一些函数:GetCommandLine(http://msdn.microsoft.com/en-us/library/ms683156.aspx)和CommandLineToArgvW(http://msdn.microsoft.com/en-us/library/ms647232.aspx),可用于获取和解析命令行。