C# 显示命令行实用程序的帮助

C# 显示命令行实用程序的帮助,c#,visual-studio-2008,.net-2.0,C#,Visual Studio 2008,.net 2.0,我有一个命令行实用程序,可以从我的站点下载很多内容。我试图在用户使用/?或/帮助参数。我有一个名为ShowUsage()的函数,它在可用参数上有很好的格式化文本 当我在项目属性中使用命令行参数时,我看到ShowUsage()在Visual Studio 2008中被调用为fine。但是,从命令行运行时,exe不会显示帮助文本。以下是ShowUsage()的简化版本: 我在谷歌的搜索中尝试了很多不同的东西,但没有一个奏效。我知道这一定很简单/容易,但就我的一生而言,我无法理解这一点 编辑: 调用S

我有一个命令行实用程序,可以从我的站点下载很多内容。我试图在用户使用/?或/帮助参数。我有一个名为ShowUsage()的函数,它在可用参数上有很好的格式化文本

当我在项目属性中使用命令行参数时,我看到ShowUsage()在Visual Studio 2008中被调用为fine。但是,从命令行运行时,exe不会显示帮助文本。以下是ShowUsage()的简化版本:

我在谷歌的搜索中尝试了很多不同的东西,但没有一个奏效。我知道这一定很简单/容易,但就我的一生而言,我无法理解这一点

编辑:

调用ShowUsage()的代码:

我有一个将参数解析到cmdargs数组的类。我确认参数在数组中。ShowUsage()中的某些内容阻止显示文本

我将尝试调试技巧,看看我发现了什么

我没有用控制台,任何地方都可以

D03男孩-只是个人喜好。至少对我来说,这会减少屏幕上的文字混乱

编辑#2

好的,更多的信息。。。我在Vista Ultimate 64位中运行VS2008。我只是检查项目属性,它被设置为“Windows应用程序”。这个实用程序是32位的


我将尝试在解决方案中创建一个单独的项目,这是一个真正的控制台程序,正如你们中的一些人所建议的那样。

是否将console.Out重定向到其他地方

尝试在ShowUsage方法中抛出System.Diagnostics.Debugger.Launch(),以便查看它是否在运行时被命中


你能用一个简单的exe复制这个问题,只接受那些帮助参数吗?

你能定义“不工作”吗?什么都不做?抛出异常?我希望问题出现在
Main(…)
方法中,即
ShowUsage()
没有被调用。另一个常见问题是没有在正确的配置中重建它,因此不会更新
bin/release
(或其他内容)

您是否将应用程序构建为控制台exe?即,项目属性中的“输出类型”是否为“控制台应用程序”?要访问控制台,它必须是

关于信息,我发现做控制台帮助屏幕的最简单的方法(一旦超过几行)是在exe中嵌入一个.txt文件;然后我只写下文本文件(如果我想替换tokes,可能仍然使用
string.Format

此外,还有其他字符串格式:

    Console.WriteLine(@"
Text File Splitter v1.4.1  released: December 14, 2008
Copyright (C) 2007-2008 Hector Sosa, Jr
http://www.systemwidgets.com

");

发布调用ShowUsage()的代码,以便我们了解您是如何检查“/”参数的。为什么要在WriteLine中使用Environment.NewLine?你要两行吗?我觉得很有趣。你是怎么得到参数的?您如何调用exe?在您编辑的问题中,什么是
cmdargs
?那不是锅炉板的一部分。如果它是一个字典,您是如何填充它的?cmdargs由一个名为Arguments的类填充,该类为我解析参数。这部分工作正常,因为当我使用调试器逐步检查cmdargs时,我看到了cmdargs中正确的参数。“你能用一个简单的exe复制问题,只接受那些帮助参数吗?”是的,这就是我发现它没有显示帮助文本的原因。好的,我尝试了System.Diagnostics.debugger.Launch()技巧,它在ShowUsage()中被调用,我可以逐步使用调试器。还是没有骰子。文本显示在输出窗口中,但在我从命令行运行exe时不会显示。boggleAnd您编辑的问题中的
cmdargs
是什么?那不是锅炉板的一部分。如果它是一个字典,您是如何填充它的?cmdargs由一个名为Arguments的类填充,该类为我解析参数。这部分工作正常,因为当我使用调试器逐步执行cmdargs时,我在cmdargs中看到了正确的参数。问题是该程序不是实际的控制台应用程序。它是一个winform应用程序,可以在不显示表单的情况下接受命令行参数。为了做我想做的事情,它需要像Marc建议的那样是一个控制台应用程序。所以程序的一部分是Winform应用程序,另一部分是控制台应用程序。
if (!Equals(cmdargs["help"], null) || !Equals(cmdargs["?"], null))
{
    ShowUsage();
}
    Console.WriteLine(@"
Text File Splitter v1.4.1  released: December 14, 2008
Copyright (C) 2007-2008 Hector Sosa, Jr
http://www.systemwidgets.com

");