【问题标题】:Project output type not changing to console application, Console window not showing in WinForms项目输出类型未更改为控制台应用程序,控制台窗口未在 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 或其他东西登录到文件。

标签: c# visual-studio winforms .net-core


【解决方案1】:

有两个解决方案:

  1. 更改Program.cs 的main 方法:删除与Forms 相关的代码行。改成Console.WriteLine("bar");
  2. 您仍然可以将信息与 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,很高兴听到您的问题已经解决,您可以点击“✔”将您的回复标记为答案。它还将帮助其他人解决类似的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 2021-04-03
相关资源
最近更新 更多