C# 如何基于参数运行显示或不显示控制台窗口的dotnet Core控制台应用程序?
我有一个dotnet core GUI应用程序,根据参数参数,它可能只显示GUI界面(使用Avalonia framework完成),或者如果它收到一些特殊参数,那么它应该在控制台模式下工作,并登录控制台而不显示GUI。 如果我使用C# 如何基于参数运行显示或不显示控制台窗口的dotnet Core控制台应用程序?,c#,.net-core,console-application,avaloniaui,C#,.net Core,Console Application,Avaloniaui,我有一个dotnet core GUI应用程序,根据参数参数,它可能只显示GUI界面(使用Avalonia framework完成),或者如果它收到一些特殊参数,那么它应该在控制台模式下工作,并登录控制台而不显示GUI。 如果我使用WinExe,则GUI显示良好,但应用程序永远不会登录控制台(例如,当使用console.WriteLine(“某些文本”))。 这意味着我需要使用Exe配置csproj,以便能够登录控制台中的任何内容,问题是当在GUI模式下运行时,与GUI应用程序窗口一起,会弹出另
WinExe
,则GUI显示良好,但应用程序永远不会登录控制台(例如,当使用console.WriteLine(“某些文本”)
)。
这意味着我需要使用Exe
配置csproj,以便能够登录控制台中的任何内容,问题是当在GUI模式下运行时,与GUI应用程序窗口一起,会弹出另一个控制台窗口,我想隐藏该窗口以仅显示GUI
在dotnetfullframework4.X中,我能够创建WPF应用程序,该应用程序在1exe中实现了这种双控制台/gui模式。
一个可能的解决方案是,如果我可以在GUI模式下运行时隐藏控制台窗口,或者Avalonia UI/dotnet core有其他方法来实现这一点。
有人知道怎么做吗
更新:以下是一些澄清:
该应用程序有两种模式:
- GUI模式:如果您只需双击“App.exe”(运行时不带参数),则GUI应显示(并且仅显示GUI,而不是GUI加上当前出现的另一个控制台窗口)。这通常是通过将csproj设置为
来实现的,但这会使WinExe
功能在以下控制台.Write
控制台模式下运行时不起作用
- 控制台模式:如果高级用户试图从控制台使用某些应用程序功能,则该应用程序的行为应类似于控制台应用程序,并具有所有预期功能,如
显示可用命令,app.exe-h
显示版本,这意味着显示一些手工制作的GUI窗口来显示输出文本或在其他任何地方(如文件中)是不合适的app.exe-v
这种双重行为有很多例子,比如VisualStudio的
devenv.exe
或应用程序。如果我没弄错,您希望在特殊参数和WinForms应用程序上启动控制台
首先,你必须设置
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
我在当地试过这个
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
</PropertyGroup>
</Project>
Exe
net5.0-windows
真的
真的
但老实说,在我的选择中,您应该使用共享库编译两个exe文件,以完成控制台exe文件和UI exe文件fe.:
yourcode.csproj(您的业务逻辑)
- yourapp-console.csproj(控制台应用程序:引用yourcode.csproj)
- yourapp-ui.csproj(WinForms应用程序:引用yourcode.csproj)
WinExe
,那么它在GUI模式下工作良好,而不是在ConsoleMode下(因为它不会向控制台发送任何内容)。如果我将csproj设置为Exe
,那么它在ConsoleMode上运行良好,但在GUI模式下不起作用(因为这样它将打开两个窗口:一个是GUI,另一个是控制台窗口)“就像VisualStudio的devenv.Exe
”—您是指devenv.com
和devenv.Exe
”,前者是一个控制台应用程序,如果在命令行上运行devenv
,您会得到它,而后者是一个windows GUI应用程序?它们可能没有像你想象的那样得到实施。哇,非常感谢你的回复!我认为您完全理解了这个问题。但是解决方案并不完全完美,它有一些缺陷:-如果您试图从命令行以GUI模式打开app.exe,则使用用于隐藏控制台的ShowWindow()
方法,它将隐藏您正在从中调用\App.exe
的现有终端窗口!(在windows 10中使用PowerShell 7.1终端进行测试)-当双击App.exe
打开GUI时,控制台窗口会闪烁一秒钟,即使是第1行,理想情况下也不会出现。另一个主要问题是,即使是GUI应用,这并不意味着我使用的是WinForms或WPF之类的纯windows框架。我正在使用,这是跨平台的(windows/Mac/Linux),但此解决方案仅适用于windows。@Lorazo对此表示抱歉,但这是我通过使用单个编译找到的唯一选项。这就是为什么我添加了imo更好的解决方案来编译两个不同的exe文件,并使用共享的代码库。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
</PropertyGroup>
</Project>