对于 Windows 窗体和 WPF 项目,OutputType 未从 Exe 更改为 WinExe

在 .NET 5 中,对 WPF 和 Windows 窗体应用进行了更改,以将 OutputTypeExe 自动更改为 WinExe。 在 .NET 6 中,我们将还原此更改,OutputType 将不再被 SDK 更改。

引入的版本

.NET 6 RC 1

旧行为

如果项目面向 .NET 5 或更高版本,OutputType 已设置为 Exe,并且 UseWindowsFormsUseWPF 设置为 true,则 .NET SDK 将 OutputType 更改为 WinExe

新行为

OutputType 不再从项目文件中更改。

<PropertyGroup>
  <OutputType>Exe</OutputType>
</PropertyGroup>

更改类别

此更改可能会影响源兼容性

更改原因

.Net 5 更改旨在简化 .NET MAUI 应用,这样 OutputType 就不需要以目标框架为条件。 但是:

  • 自动推断 OutputType 打破了用户的期望,并让开发人员感到沮丧。 有关详细信息,请参阅 dotnet/sdk#16563 及其链接的问题。
  • .NET MAUI 应用将默认使用 WinUI,而不是 Windows 窗体或 WPF,因此自动推断甚至不适用于 .NET MAUI 应用。

如果你依赖于 OutputTypeExe 更改为 WinExe 这一事实,则应该在项目文件中显式地将其设置为 WinExe

如果受以前的中断性变更的影响且必须设置 DisableWinExeOutputInference 以禁用在 .NET 5 中添加的逻辑,则可以立即删除该属性。

受影响的 API

不可用

请参阅