如何在 WPF .NET Core 应用程序中启用控制台?

Posted

技术标签:

【中文标题】如何在 WPF .NET Core 应用程序中启用控制台?【英文标题】:How do I enable the console in a WPF .NET Core application? 【发布时间】:2020-01-28 03:47:18 【问题描述】:

我是第一次尝试 WPF .NET Core,我在新的 WPF .NET Framework 项目中总是做的一件事是打开控制台,但是当我尝试这样做时收到错误消息在 .NET Core 中。

在面向 .NET Framework 的传统 WPF 中,这相当简单;

将 App.xaml 的构建操作设置为 Page 在某处定义一个 Main 方法,并用 STAThreadAttribute 标记它 在项目设置中,将输出类型设置为 Console Application,并将 Startup 对象设置为您放置 Main 方法的位置

我在 WPF .NET Core 中复制了这些步骤,但是当我尝试更改 App.xaml 的构建操作时出现错误

错误(在属性窗口的下拉菜单中选择页面后立即发生):

An error has occurred while saving the edited properties listed below:
    Build Action
One or more values are invalid. 
Cannot add 'App.xaml' to the project, because the path is explicitly excluded from the project 
(C:\Program Files\dotnet\sdk\3.0.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.NET.Sdk.WindowsDesktop.targets (45,5)).

有没有人知道解决这个问题的方法,或者在 WPF .NET Core 中启用控制台的另一种方法?

【问题讨论】:

【参考方案1】:

设置以下属性将使您的 WPF 应用程序成为“控制台应用程序”

<PropertyGroup>
  <OutputType>Exe</OutputType>
  <DisableWinExeOutputInference>true</DisableWinExeOutputInference>
</PropertyGroup>

对于 WPF 和 WinForms 应用,SDK 会自动将 OutputType 从 Exe 更改为 WinExe。见https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/5.0/automatically-infer-winexe-output-type

【讨论】:

这在 5.0 中完美运行【参考方案2】:

经过反复试验,我发现 .csproj 文件搞砸了。我不知道它到底是怎么出错的,我怀疑它与在那个版本的 VS2019 中通过属性窗口编辑项目有关。

我手动编辑了 .csproj,如果它看起来如下所示,它可以工作:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWPF>true</UseWPF>
    <ApplicationIcon />
    <StartupObject>ProjectName.App</StartupObject>
  </PropertyGroup>

  <ItemGroup>
    <Page Include="App.xaml"></Page>
  </ItemGroup>

  <ItemGroup>
    <ApplicationDefinition Remove="App.xaml"></ApplicationDefinition>      <--- key part
  </ItemGroup>

</Project>

我检查了 .csproj 文件中是否有工作的 .NET Framework 项目,关键似乎是手动将 App.xaml 作为 ApplicationDefinition 删除,因为 .NET Framework .csproj 中没有该部分。

【讨论】:

刚试过这个,乍一看似乎对我有用,我不确定它与 .NET Framework 不一样的事实是否是一个错误,或者如果它是故意这样建造的。无论哪种方式,很好的解决方案! 我很幸运,只需设置:&lt;EnableDefaultApplicationDefinition&gt;false&lt;/EnableDefaultApplicationDefinition&gt; per github.com/dotnet/wpf/issues/2812#issuecomment-607537794

以上是关于如何在 WPF .NET Core 应用程序中启用控制台?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.net Core WebAPI 中启用 CORS

如何使用 XamlIslands 和桌面桥打包 WPF (.NET Core) 应用程序?

如何使用 net core / net5+ 为 wpf 设置 STA 公寓状态? [复制]

如何在 ASP.NET Core 中启用 CORS

Microsoft.ReportViewer.WinForms.V15 与 .NET Core 3.1 不兼容 - 如何在 WPF Core 中显示 RDLC?

在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)