SDK 스타일 .NET Framework 프로젝트에서 Source Generator 사용하기

C# .NetFramework 환경 WPF 프로그램 개발 강의 또는 블로그 찾습니다. 이 글에서 @Vincent 님께서 답글 달아주신 내용을 보다가 문득 생각이 들어 테스트해본 내용을 공유드려봅니다.

보통 .NET Framework 프로젝트라고하면 비 SDK 프로젝트 (레거시 프로젝트) 파일 포맷을 주로 사용하시게 될텐데요, SDK 스타일 프로젝트에서도 .NET Framework 프로젝트를 사용할 수 있는 것은 경험이 있으신 분들께서는 알고 계신 내용이실겁니다.

그런데 흥미롭게도, Source Generator가 의외로 이 환경에서 .NET Framework를 대상으로도 잘 작동하며, 그래서 CommunityToolkit.Mvvm의 소스 제네레이터가 .NET Framework 4.8을 대상으로도 잘 작동하는 것을 봤습니다.

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

	<PropertyGroup>
		<OutputType>Exe</OutputType>
		<TargetFramework>net48</TargetFramework>
		<Nullable>disable</Nullable>
		<ImplicitUsings>disable</ImplicitUsings>
		<LangVersion>8.0</LangVersion>
	</PropertyGroup>

	<ItemGroup>
		<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
	</ItemGroup>

</Project>

위와 같이 대상 언어 버전을 8.0으로 상향 조정하고, 몇몇 설정을 바꾼 뒤,

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;

namespace Sample
{
    public static class Program
    {
        [STAThread]
        private static void Main(string[] args)
        {
            var vm = new SampleViewModel();
            vm.Name = "World";
            vm.HelloCommand.Execute(null);
        }
    }

    public partial class SampleViewModel : ObservableObject
    {
        [ObservableProperty]
        private string name;

        [RelayCommand]
        private void Hello()
        {
            Console.WriteLine($"Hello, {Name}!");
        }
    }
}

이렇게 코드를 작성하고 컴파일하면 정상적으로 빌드가 됩니다.

SDK 스타일로 닷넷 프레임워크 프로젝트를 마이그레이션해두면, nuget 패키지 복원 문제가 불필요하게 복잡해지고 꼬이는 문제는 예방할 수 있어 큰 이점이 있습니다. 다만, 구 msbuild 프로젝트 아키텍처에 의존하고 있는 경우 (특히 C++/CLI를 쓰는 경우)에는 온전히 도입이 어려울 수 있어 적절한 절충안 정도로 보시는것이 현실적일 수 있겠습니다. :smiley:

1개의 좋아요

몰라서 찾아봤는데 SDK 스타일 프로젝트는

.NET project SDK overview | Microsoft Learn

이 문서를 의미하고 있습니다.

1개의 좋아요

저희 팀 에서도 이런식으로 사용해보려고 했으나 vs2019에서는 쓸 수 없다고 확인되어 쓰지 못하고 있습니다.. 혹시 저희 같은 분들이 있을까 내용 공유 드립니다.

이미지 링크 경로는 기억이 안나네요.. ㅎㅎ

2개의 좋아요

네…당연합니다.

소스제네레이터는 .net 5에 시범적으로 콘솔어플리케이션에서만 동작했던 걸로 기억하고

.net 6부터 여러 군데에서 사용하게 된걸로 기억하여 그때부터 wpf에서 사용 가능하게 만들어진 것입니다.

그리고 .net6은 vs2022부터 사용가능했지요.

.net core 3.0 과 .net 5는 vs2019
.net6에서 .net9는 vs2022
.net10부터는 vs2026

사용 가능 기간이 이렇게 됩니다.

2개의 좋아요

맞습니다.

예전에 제가 글을 올려둔적도 있읍니다 허허 ㅎㅎ;;

2개의 좋아요