개발
SDK-Style .NET Framework 프로젝트 생성하기
HisaCat
2026. 3. 17. 19:49

기본적으로 Visual Studio에서는 SDK-Style로 프로젝트를 만드려고 할 시
.NET Framework를 선택할 수 없도록 해 두었다.

이쪽을 이용하면 되지만, 이건 SDK-Style이 아닌 레거시 project 스타일이다.
VS를 통하지 않고, .NET CLI를 통해서 .NET Framework로 프로젝트를 생성하려고 해 보아도 다음과 같은 에러가 발생할 것이다:
C:\Project>dotnet new classlib -f net472
오류: 잘못된 옵션 :
-f net472
'net472'은(는) -f에 유효한 값이 아닙니다. 가능한 값은 다음과 같습니다.
net8.0 - 대상 net8.0
net9.0 - Target net9.0
netstandard2.0 - 대상 netstandard2.0
netstandard2.1 - 대상 netstandard 2.1
자세한 내용은 다음을 실행하세요.
dotnet new classlib -h
종료 코드에 관한 자세한 내용은 https://aka.ms/templating-exit-codes#를 참조하세요.127
그럼 Sdk-Style .NET Framework 프로젝트를 만드는 법은 없는걸까? (그럴리가 없지)
해결 방법은 간단하다.
일단 VS를 이용하거나, 혹은 다음과 같이 cli를 통해 그냥 .NET(혹은 .NET Standard) 버전의 프로젝트를 생성한다.
C:\Project>dotnet new classlib
"클래스 라이브러리" 템플릿이 성공적으로 생성되었습니다.
생성 후 작업 처리 중...
C:\Project\Project.csproj 복원 중:
복원에 성공했습니다.
이후, 생성된 Project.csproj를 텍스트 편집기로 연다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
이후, TargetFramework를 원하는 버전으로 바꿔준다.
가령 .NET Framework 4.7.2의 경우, 이렇게 수정해주면 된다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<!--<ImplicitUsings>enable</ImplicitUsings>-->
<!--<Nullable>enable</Nullable>-->
</PropertyGroup>
</Project>
.NET Framework의 경우 기본적으로 C# 3.7을 사용하기 때문에,
여기서는 C# 8.0 이상부터 지원하는 Nullable과, C# 10.0 이상부터 지원하는 ImplicitUsings를 주석처리 해 두었다.
만약 특정 C# 버전을 직접 지정하고 싶다면, LangVersion 태그를 추가하여 버전을 직접 명시하면 된다.
예시:
- 최신 버전(일반적으로 권장되지 아니함): <LangVersion>latest</LangVersion>
- C# 8.0: <LangVersion>8.0</LangVersion>
저장하면 끝이다.
Q: ㅇㄱㅈㅉㅇㅇ?
A: 네 진짜에요.
당연?하게나마 SDK Style 프로젝트 자체는 .NET Framework도 지원한다.
이걸 왜 UX단에서 막아놓은건진 모르겠는데,
아마 그냥 지원정책과 관련이 있던가 최신 .NET 개발로 유도하기 위한 장치가 아닌가 싶다.
나 이거몰라서 모딩같은거 할 때 맨날 레거시 프로젝트로 만드느라 종종 고역이었는데...
이젠... 해방이야... (바보)