如何在 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 不一样的事实是否是一个错误,或者如果它是故意这样建造的。无论哪种方式,很好的解决方案! 我很幸运,只需设置:<EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>
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 公寓状态? [复制]
Microsoft.ReportViewer.WinForms.V15 与 .NET Core 3.1 不兼容 - 如何在 WPF Core 中显示 RDLC?