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를 쓰는 경우)에는 온전히 도입이 어려울 수 있어 적절한 절충안 정도로 보시는것이 현실적일 수 있겠습니다. ![]()
