我有一个控制台应用程序,用于从WS导入内容。
我对控制台应用很陌生,所以我有一个问题。
Project包含一个名为Importer.cs的类。该类有一个名为Initialize()的方法:
class Importer
{
static void Initialize()
{
//here i connect to the server etc.
}
}
现在我希望能够像我这样打电话给我的APP:
Importer.exe Initialize
所以它应该调用Initialize方法,然后我希望能够继续使用例如:
Importer.exe StartImport
我已经使用了args []参数,但我现在已经陷入困境。
答案 0 :(得分:1)
使用类似CommandLineParser的库,然后使用Reflection将这些方法称为MethodInfo对象。
答案 1 :(得分:0)
在您的控制台应用程序中,查看解决方案资源管理器(在VS的右侧窗口中显示所有文件)。找到一个名为PROGRAM.CS的程序。打开它并寻找:
static void Main(string[] args)
{
}
在里面,把这个:
static void Main(string[] args)
{
//This starts a new instance of the Importer Class
Importer myImporter = new Importer();
//This calls the Initialize Method within Importer
Importer.Initialize();
//This calls the StartInput() Method within Importer
Importer.StartInput();
//Use Console.ReadLine() as the last line in this method to keep your screen open after program execution ends.
Console.ReadLine();
}
您的控制台应用程序首先在控制台应用程序中运行Main()。
然后,您只需使用F5测试项目。测试完成后,通过双击EXE文件来构建项目并运行。
答案 2 :(得分:0)
根据您正在做的事情,这可能甚至不起作用。我想象一种情况,你Initialize()
和之后StartImport()
,但在这两个调用之间,程序已经完成,初始化状态消失了。如果你没有像Initialize()
这样的方法,而是原子命令,那么你的方法原则上是可行的。
但是出现了一个问题:这是通用的吗?我的意思是:说,你添加另一种方法。您是否希望通过自动建立的子命令访问该方法,或者您不介意添加另一个子命令案例?第一个选择意味着,你需要对Reflection感到满意。
现在,比方说,你添加方法,由于任何原因你不能声明私有,但你不希望它们作为子命令公开。因此,您需要跟踪可见性。当然,这意味着设计不佳,但如果您遇到遗留组件,可能会发生这种情况。
现在,假设您需要Initialize()
(或类似)命令。当调用下一个子命令时,它们会处理连接状态或其他任何程序,并且程序仍然需要运行,因此它可以使用初始化的信息,句柄等。那么设计控制台应用程序会不会更有意义像一个壳?因此,您将从Importer.exe
开始,并询问子命令。