Laz*_*aro 5 c# console-application .net-core avaloniaui
我有一个 dotnet-core GUI 应用程序,根据参数参数,它可能只显示 GUI 界面(使用 Avalonia 框架完成),或者如果它收到一些特殊参数,那么它应该在控制台模式下工作并登录到控制台而不显示图形用户界面。如果我使用<OutputType>WinExe</OutputType>
,则 GUI 显示正常,但应用程序永远不会登录到控制台(例如使用 时Console.WriteLine("some-text")
)。这意味着我需要配置 csproj 以便<OutputType>Exe</OutputType>
能够登录到控制台任何内容,问题是当在 GUI 模式下运行时,与 GUI 应用程序窗口一起,会弹出另一个我想隐藏以显示的控制台窗口只有图形用户界面。
在 dotnet full-framework 4.XI 中,我能够创建在 1 个 exe 中执行此双控制台/GUI 模式的 WPF 应用程序。一个可能的解决方案是,如果我可以在 GUI 模式下运行时隐藏控制台窗口,或者 Avalonia-UI/dotnet-core 有其他方法可以做到这一点。有谁知道如何做到这一点?
更新:以下是一些说明:该应用程序有 2 种模式:
<OutputType>WinExe</OutputType>
,但这会使该Console.Write
函数在以下环境中运行时不起作用Console Mode
。app.exe -h
显示可用命令、app.exe -v
显示版本这意味着无法显示一些手工制作的 GUI 窗口来显示输出文本或将日志记录到文件中等其他位置。它可以在 2 个单独的可执行文件中完成,但像我这样的一些人发现只是一个简单的 app.exe 文件的应用程序有一些美妙之处。这种双重行为的示例有很多,例如VisualStudio Nirsoft应用程序。devenv.exe
或
如果我的理解是对的,您想在另一方面启动特殊参数和 WinForms 应用程序的控制台。
首先你必须设置
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
Run Code Online (Sandbox Code Playgroud)
在您的项目文件中。查看文档
尝试将其设置<OutputType>
为Exe
并将其添加到您的Program > 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();
}
Run Code Online (Sandbox Code Playgroud)
我在本地尝试过这个
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
但老实说,我的选择是,您应该使用共享库编译两个 exe 文件,以完成一个控制台 exe 文件和一个 UI-exe 文件,例如:
yourcode.csproj(您的业务逻辑)
归档时间: |
|
查看次数: |
1896 次 |
最近记录: |