项目输出类型未更改为控制台应用程序,控制台窗口未在 WinForms 中显示

Posted

技术标签:

【中文标题】项目输出类型未更改为控制台应用程序,控制台窗口未在 WinForms 中显示【英文标题】:Project output type not changing to console application, Console window not showing in WinForms 【发布时间】:2021-09-08 11:23:14 【问题描述】:

我正在处理 .NET Core 项目上的 Windows 窗体,需要显示控制台窗口并使用 Console.WriteLine() 打印一些信息。 我通常在winform项目中通过Project >> [my project name] Properties将项目属性中的输出类型更改为“控制台应用程序”来执行此操作,但在我保存并打开设置后,它目前正在更改回“Windows应用程序”。

为什么会这样?我该如何解决?

我还尝试从项目文件中删除<UseWindowsForms>true</UseWindowsForms>,这使问题更加严重。

【问题讨论】:

为什么要打印到控制台?为什么不使用记录器 @ilansch 输出窗口没有显示我Console.WriteLine 写的内容,还是另一个窗口? 你需要更清楚,在Visual Studio中调试时使用输出窗口。控制台将在运行时使用。我的意思是,如果要打印 yoy neex 输出,正确的方法是使用 log4net 或其他东西登录到文件。 【参考方案1】:

有两个解决方案:

    更改Program.cs 的main 方法:删除与Forms 相关的代码行。改成Console.WriteLine("bar"); 您仍然可以将信息与 Windows 窗体一起打印到控制台。 只需将Console.WriteLine("foo"); 或其他内容放在Program.cs 的主要方法中即可。

【讨论】:

但问题是它根本不显示控制台窗口。 您可以在 Visual Studio 的输出选项卡中看到。 充斥着不相关的数据,如线程退出、编译信息……我无法清楚地看到我的日志,就像在控制台窗口中一样【参考方案2】:

我终于设法使用此代码强制显示控制台窗口,

public Form1()

    InitializeComponent();

    //Added this call
    AllocConsole();


[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();

【讨论】:

这行得通,请注意,即使您的进程是从现有控制台启动的,您总会得到一个新控制台。 @Abraham,很高兴听到您的问题已经解决,您可以点击“✔”将您的回复标记为答案。它还将帮助其他人解决类似的问题。

以上是关于项目输出类型未更改为控制台应用程序,控制台窗口未在 WinForms 中显示的主要内容,如果未能解决你的问题,请参考以下文章

在控制台窗口中输出颜色方阵

C#工程中输出类型转换以及程序运行后控制台窗口不退出设置

PITR 后 recovery.conf 未更改为 recovery.done

CMD 命令未在控制台中运行

在 Usemap/area 情况下,光标未更改为指针

Flask-Bootstrap render_pagination()未更改为活动页面[重复]