Microsoft.NET.Sdk.WindowsDesktop에 대해서...

.NET Core 3.0에서 Windows Forms와 WPF가 처음 도입되었을 때에는 Microsoft.NET.Sdk.WindowsDesktop 프로젝트 SDK를 사용했습니다.

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <OutputType>WinExe</OutputType>
  <TargetFramework>netcoreapp3.0</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
  <Nullable>enable</Nullable>
</Project>

그러다가 .NET 5에서 Microsoft.NET.Sdk를 사용하고, WindowsDesktop 관련 속성들은 Windows Forms나 WPF를 사용하면 자동으로 로드되는 것으로 바뀌었습니다.

<Project Sdk="Microsoft.NET.Sdk">
  <OutputType>WinExe</OutputType>
  <TargetFramework>net5.0-windows</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
  <Nullable>enable</Nullable>
</Project>

.NET 5 이상을 타겟하는 프로젝트에서 Microsoft.NET.Sdk.WindowsDesktop을 사용하게 되면 NETSDK1137 경고가 발생합니다.

(링크에는 오류라고 나와 있지만 이는 잘못된 것입니다. 실제로는 경고가 맞습니다.)

하지만 .NET Framework나 .NET Core 3을 타겟하게 되면 이런 경고가 나오지 않습니다. 그렇다면 여기서 궁금증이 생길 수 있습니다. “그러면 기존 .NET Framework나 .NET Core 3 프로젝트는 Microsoft.NET.Sdk.WindowsDesktop을 써야하나?” 제가 그랬거든요.

하지만 실제로는 그렇지 않습니다. Microsoft.NET.Sdk 써도 잘만 작동합니다. 그 이유는

위 링크를 보시면 WPF나 Windows Forms를 사용하고, .NET Core 3.0 이상을 타겟하거나, .NET Framework를 타겟하면 ImportWindowsDesktopTargets 속성을 true로 설정하게 되어있습니다. 즉, 어떤 프레임워크를 쓰든 그냥 Microsoft.NET.Sdk 써도 WindowsDesktop 속성은 잘만 로드됩니다.

저는 .NET Core 3은 지원 끝난지 한참 됐으니까 넘어가고, 최소한 .NET Framework를 타겟하면 경고가 나게끔 해야 한다고 봅니다.

쨌든 결론은 .NET Framework를 타겟하든 .NET Core를 타겟하든 Windows Forms나 WPF를 써도 Microsoft.NET.Sdk 쓰면 됩니다.

4개의 좋아요