我有一个具有GUI的C#应用程序,其输出类型设置为Windows应用程序。我还想从命令行调用它(通过参数),因此它也需要是一个控制台应用程序。
有没有办法让我的应用程序同时作为Windows应用程序和控制台应用程序运行? 有没有办法在运行时设置它,还是编译时设置?
答案 0 :(得分:8)
您可以附加控制台。使Program.cs中的代码如下所示:
[STAThread]
static void Main(string[] args) {
if (args.Length > 0) {
AttachConsole(-1);
Console.WriteLine("");
Console.WriteLine("Running in console, press ENTER to continue");
Console.ReadLine();
}
else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
答案 1 :(得分:1)
Windows窗体应用程序可以接受命令行参数。在显示应用程序主窗体之前,您只需要在main函数中处理这种情况。
static void Main(string[] args)
{
if (args.Length > 0)
{
// Run it without Windows Forms GUI
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
答案 2 :(得分:1)
这是一个编译时设置:target:
编译器上有csc
选项。 /target:winexe
构建Windows应用程序(即使用GUI); /target:exe
构建一个控制台应用程序。但是,这两种类型的应用程序都可以接受命令行参数。
答案 3 :(得分:0)
即使您的应用程序输出类型设置为Windows应用程序,您仍然可以从命令行调用它并传递参数。
只需将Main方法定义更改为:static void Main(string [] args){...} 并且您可以访问'args'变量中传递的参数。