我有一个 dotnet-core GUI 应用程序,根据参数参数,它可能只显示 GUI 界面(使用 Avalonia 框架完成),或者如果它收到一些特殊参数,则它应该在控制台模式下工作并登录控制台而不显示图形用户界面。
如果我使用 <OutputType>WinExe</OutputType>
,然后 GUI 显示正常,但应用程序永远不会登录到控制台(例如,在使用 Console.WriteLine("some-text")
时)。
这意味着我需要使用 <OutputType>Exe</OutputType>
配置 csproj为了能够登录控制台任何东西,问题是当在 GUI 模式下运行时,连同 GUI 应用程序窗口一起,另一个控制台窗口会弹出,我想隐藏它以仅显示 GUI。
在 dotnet full-framework 4.X 中,我能够创建 WPF 应用程序,在 1 个 exe 中执行此双控制台/gui 模式。
一个可能的解决方案是,如果我可以在 GUI 模式下运行时隐藏控制台窗口,或者 Avalonia-UI/dotnet-core 有其他一些方法可以做到这一点。
有谁知道如何做到这一点?
更新:以下是一些说明:
该应用程序有两种模式:
<OutputType>WinExe</OutputType>
来完成。 ,但这使得 Console.Write
功能在以下运行时不起作用Console Mode
. app.exe -h
显示可用命令,app.exe -v
显示版本等。这意味着不能显示一些手工制作的 GUI 窗口,显示输出文本或记录到文件中的任何其他地方。 它可以在 2 个单独的可执行文件中完成,但是像我这样的一些人在只是一个简单的 app.exe 文件的应用程序中发现了一些美妙之处。
这种双重行为有很多例子,比如 VisualStudio 的
devenv.exe
或 Nirsoft应用程序。
最佳答案
如果我说得对,您想在特殊参数和 WinForms 应用程序上启动控制台。
首先你必须设置
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
在您的项目文件中。 See documentation尝试设置
<OutputType>
返回 Exe
并将其添加到您的程序> Main:static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
IntPtr h = GetConsoleWindow();
// switch here to show or not show console window
ShowWindow(h, 0);
// ShowWindow(h, 1);
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Hide your WinForms application manually if parameter is set
var startup = new MainFormStartup();
Application.Run(startup.CreateForm<MainWindow>());
}
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
}
我在本地尝试过<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
</PropertyGroup>
</Project>
但老实说,在我的选择中,您应该使用共享库编译两个 exe 文件,以完成控制台 exe 文件和 UI-exe 文件,例如:yourcode.csproj(您的业务逻辑)
关于c# - 如何根据参数参数运行显示或不显示控制台窗口的 dotnet Core 控制台应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65208298/