改进我传递调试命令行参数的方式我是我的控制台应用程序,我传递的参数是这样的:(字符串)#IfDEBUGThen'调试此应用程序的命令行参数:DimDebugArguments="HotkeyMaker.exe/Hotkey=Escape/run=notepad.exe"ReturnDebugArguments.Split("").ToList#Else'Nomal命令行参数:ReturnMy.Application.CommandLineArgs.ToList#EndIfEndFunction#EndRegion但是这样有一个明显的问题,空格字符会产生误报,eg:MyProgram.exe/Run="Processpathwithspaces.exe"大家都知道知道,通常参数是用方括号双引号“”字符或空格字符分隔的标记分隔的,所以我会得到很多误报来自定义我的调试参数。在C#或VBNET中,如何改进函数以采用正确分隔的(自定义)参数列表?更新2:我制作此示例是为了阐明我的意图:ModuleModule1''''''Debugcommandlineargumentsfortesting。'''PrivateReadOnlyDebugArgumentsAsString="ThisProcess.exe/Switch1=Value/Switch2=""C:folderwithspacesfile.txt"""''''''这里将存储此应用程序的命令行参数。'''如果DebugArguments变量什么都没有,那么这里使用直接从控制台传递的“正常”参数,'''否则,使用我的自定义调试参数。'''PrivateArgumentsAsList(OfString)=Set_CommandLine_Arguments()SubMain()Parse_Arguments()EndSubPrivateSubParse_Arguments()ForEachArgAsStringInArgumentsMsgBox(Arg)'结果:'------'第一个参数:ThisProcess.exe'第二个参数:/Switch1=Value'第三个参数:/Switch2="C:folder'第四个参数:与'第五个参数:spacesfile.txt"下一个参数'预期参数:'------------------'第一个参数:ThisProcess.exe'第二个参数:/Switch1=Value'第三个参数:/Switch2="C:folderwithspacesfile.txt"EndSubPublicFunctionSet_CommandLine_Arguments()AsList(OfString)#IfDEBUGThenIfNotString.IsNullOrEmpty(DebugArguments)Then'返回自定义参数。ReturnDebugArguments.Split.ToListElse'返回直接从控制台传递的普通命令行参数。ReturnMy.Application.CommandLineArgs.ToListEndIf#Else'返回直接从控制台传递的普通命令行参数。ReturnMy.Application.CommandLineArgs.ToList#EndIfEndFuncModule我认为这可能是您尝试管理调试命令行的方式如果转到项目属性->调试,则可以在启动选项下设置启动命令行。如果您还使用引号对文件/路径名进行转义(如Windows和注册表中的快捷方式路径),则参数/路径将保持不变。例如:/Hotkey=Escape/run="ProgramFilesfoldernamenotepad.exe"有多种方法可以获取命令行参数,但.NET会为您解析命令行。两个适用于任何地方的是:myCmd=Environment.CommandLineargs=Environment.GetCommandLineArgs()第一个将返回完整的命令行,包括作为第一段的当前应用程序的名称。GetCommandLineArgs将命令行解析为字符串数组,同样args(0)是当前可执行文件的名称。vbArgs=My.Application.CommandLineArgs这个只是稍微有点不同,只返回参数(没有exe名称),返回的是一个ReadOnlyCollection(ofString)还有另一种方式,让人想起以前的DOS,这个很有用的:PublicSubMain(argsAsString())不是从主窗体启动应用程序,而是在属性->应用程序中,将启动对象设置为SubMain,然后在上面的模块中创建一个子窗体。如果添加字符串数组参数,NET将解析命令行,跳过可执行文件名称并传递数组中的参数。我个人更喜欢这个,因为我很少关心可执行文件的名称。这在这种情况下特别有用,因为如果您有命令行,您可能不想显示表单或启动消息泵。即使是直接的WinForm应用程序,启动顺序也可能不同,或者在打开文件时包含额外的步骤。您可以通过设置开头提到的启动命令行来在VS/VB中获得相同的一组参数。所有GetCommandArgs变体将在IDE中返回与运行时相同的信息(包含EXE名称的变体除外,它将在IDE中报告...myApp.vshost.exe)。在VS项目属性中使用此命令行的示例:/Hotkey=Escape/run="ProgramFilesfoldernamenotepad.exe""/arg=thisisanarg"(换行符肯定会扭曲东西)PublicSubMain(argsAsString())ForjAsInteger=0Toargs.Length-1Console.WriteLine("arg{0}=={1}",j,args(j))NextEndSub输出:arg0==/Hotkey=Escapearg1==/run=ProgramFiles文件夹名称notepad.exearg2==/arg=这是一个arg空格保留在第二个arg(1)中,因为它们用引号转义,因为用户必须-引号也是删除。将它们复制到列表中以供处理或应用程序需要执行的任何操作。您可以在运行时和IDE中以相同的方式从相同的位置获得相同的参数,而无需执行任何不同的操作。以上就是C#学习教程:改进我传递和调试命令行参数的方式分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
