【问题标题】:How do I enable the console in a WPF .NET Core application?如何在 WPF .NET Core 应用程序中启用控制台?
【发布时间】: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 中启用控制台的另一种方法?

【问题讨论】:

    标签: c# 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
    猜你喜欢
    • 2019-12-29
    • 2019-05-18
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多