[英]How to run dotnet Core console application that shows the console window or not based on argument parameters?
我有一個 dotnet-core GUI 應用程序,根據參數參數,它可能只顯示 GUI 界面(使用 Avalonia 框架完成),或者如果它收到一些特殊的 arguments 那么它應該在控制台模式下工作並登錄控制台而不顯示圖形用戶界面。 如果我使用<OutputType>WinExe</OutputType>
,那么 GUI 顯示正常,但應用程序永遠不會登錄到控制台(例如使用Console.WriteLine("some-text")
時)。 這意味着我需要使用<OutputType>Exe</OutputType>
配置 csproj 以便能夠登錄控制台任何內容,問題是在 GUI 模式下運行時,連同 GUI 應用程序 window,另一個控制台 window 彈出我想隱藏它以僅顯示 GUI。
在 dotnet 全框架 4.XI 中,能夠創建 WPF 應用程序,這些應用程序在 1 個 exe 中執行此雙控制台/gui 模式。 一個可能的解決方案是,如果我可以讓控制台 window 在 GUI 模式下運行時隱藏,或者 Avalonia-UI/dotnet-core 有其他方法可以做到這一點。 有誰知道怎么做?
更新:以下是一些說明:該應用程序有 2 種模式:
<OutputType>WinExe</OutputType>
來完成,但這會使Console.Write
function 在以下Console Mode
運行時不起作用。app.exe -h
來顯示可用命令, app.exe -v
顯示版本等。這意味着不能顯示一些手工制作的 GUI window 顯示 output 文本或在其他任何地方記錄到文件中。 它可以在 2 個單獨的可執行文件中完成,但是像我這樣的一些人在只是一個簡單的 app.exe 文件的應用程序中發現了一些美。 這種雙重行為有很多例子,比如VisualStudio 的Nirsoft應用程序。devenv.exe
或
如果我說對了,您想在特殊參數和 WinForms 應用程序上啟動控制台。
首先你必須設置
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>
在您的項目文件中。 查看文檔
嘗試將<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();
}
我在本地嘗試過
<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 文件,fe.:
yourcode.csproj(您的業務邏輯)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.