项目输出类型未更改为控制台应用程序,控制台窗口未在 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 中显示的主要内容,如果未能解决你的问题,请参考以下文章