본문으로 건너뛰기

.NET 10 환경 설정

릴리스 노트 자동화 시스템은 Git 로그를 분석하고 문서를 생성하는 여러 C# 스크립트로 구성되어 있습니다. 이 스크립트들은 .csproj 프로젝트 파일 없이 단일 .cs 파일만으로 실행되는 .NET 10의 file-based app 기능을 활용합니다. 프로젝트 설정 없이 곧바로 스크립트를 실행할 수 있어, 자동화 도구를 빠르게 만들고 수정하기에 적합하기 때문입니다.

이 절에서는 .NET 10 SDK를 설치하고, file-based app이 제대로 동작하는지 확인하는 과정을 살펴보겠습니다.

.NET 10부터 지원되는 이 기능은 단일 .cs 파일만으로 애플리케이션을 실행할 수 있게 해줍니다. 기존에는 dotnet new console로 프로젝트를 생성한 뒤 dotnet run으로 실행해야 했지만, file-based app은 그 과정을 건너뜁니다.

Terminal window
# 기존 방식 (프로젝트 필요)
dotnet new console -n MyApp
cd MyApp
dotnet run
# file-based app (단일 파일)
dotnet MyScript.cs

이 튜토리얼의 자동화 스크립트들이 file-based app으로 작성된 이유는 명확합니다. 릴리스 노트 생성을 위한 스크립트는 빠른 프로토타이핑과 수정이 중요하고, 배포용 빌드가 필요 없으며, 프로젝트 간 참조 없이 독립적으로 동작하면 충분합니다. 반면 여러 파일로 구성된 대규모 애플리케이션이나, DLL/EXE 빌드가 필요하거나, 테스트 프로젝트와 연동해야 하는 경우에는 기존 프로젝트 방식이 여전히 적합합니다.

  1. .NET 다운로드 페이지에서 SDK 다운로드
  2. 설치 프로그램 실행
  3. 설치 완료 후 터미널에서 확인:
Terminal window
dotnet --version
# 출력: 10.0.100

Homebrew 사용:

Terminal window
brew install dotnet-sdk

수동 설치:

  1. .NET 다운로드 페이지에서 macOS 버전 다운로드
  2. .pkg 파일 실행
  3. 확인:
Terminal window
dotnet --version
Terminal window
# Microsoft 패키지 저장소 추가
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# SDK 설치
sudo apt-get update
sudo apt-get install -y dotnet-sdk-10.0
# 확인
dotnet --version

터미널에서 다음 명령어를 실행하여 올바르게 설치되었는지 확인합니다.

Terminal window
# 버전 확인
dotnet --version
# 출력: 10.0.100 (또는 그 이상)
# SDK 정보 확인
dotnet --info

예상 출력:

.NET SDK:
Version: 10.0.100
Commit: ...
Workload version: ...
런타임 환경:
OS Name: Windows
OS Version: 10.0.22631
OS Platform: Windows
RID: win-x64
Base Path: C:\Program Files\dotnet\sdk\10.0.100\

file-based app이 제대로 작동하는지 테스트해봅시다.

hello.cs 파일을 생성합니다:

hello.cs
Console.WriteLine("Hello, .NET 10 file-based app!");
Console.WriteLine($"현재 시간: {DateTime.Now}");
Terminal window
dotnet hello.cs

예상 출력:

Hello, .NET 10 file-based app!
현재 시간: 2025-12-20 오전 10:30:45

file-based app에서도 NuGet 패키지를 사용할 수 있습니다. 파일 상단에 #r 지시자를 추가합니다:

nuget-test.cs
#r "nuget: Spectre.Console, 0.54.0"
using Spectre.Console;
AnsiConsole.MarkupLine("[green]Hello[/] from [blue]Spectre.Console[/]!");

실행:

Terminal window
dotnet nuget-test.cs

첫 실행 시 패키지를 다운로드하므로 시간이 걸릴 수 있습니다.

일부 도구에서 .NET SDK 경로를 찾지 못할 경우 환경 변수를 설정합니다.

Windows (PowerShell):

Terminal window
$env:DOTNET_ROOT = "C:\Program Files\dotnet"
[System.Environment]::SetEnvironmentVariable("DOTNET_ROOT", "C:\Program Files\dotnet", "User")

macOS/Linux:

Terminal window
export DOTNET_ROOT=/usr/share/dotnet
echo 'export DOTNET_ROOT=/usr/share/dotnet' >> ~/.bashrc

dotnet 명령어가 어디서든 실행되려면 PATH에 포함되어야 합니다.

Windows:

Terminal window
$env:Path -split ';' | Where-Object { $_ -like '*dotnet*' }

macOS/Linux:

Terminal window
echo $PATH | tr ':' '\n' | grep dotnet
기능지원 여부예시
Top-level statementsOConsole.WriteLine("Hello");
NuGet 패키지O#r "nuget: PackageName, Version"
명령줄 인자Oargs 배열 사용
여러 클래스O파일 내 여러 클래스 정의 가능
async/awaitOawait Task.Delay(1000);
프로젝트 참조X단일 파일 전용

file-based app은 단일 파일 전용이므로 다른 .cs 파일을 직접 참조할 수 없고, DLL/EXE 빌드도 불가능합니다. 대규모 프로젝트에는 부적합하지만, 이 튜토리얼의 자동화 스크립트처럼 독립적으로 동작하는 도구에는 이상적입니다.

여러 file-based app에서 공통 설정을 사용하려면 Directory.Build.props 파일을 활용합니다.

Directory.Build.props:

<Project>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

이 파일이 있는 폴더(또는 상위 폴더)에서 실행되는 모든 file-based app에 설정이 적용됩니다.

NuGet 패키지 버전을 중앙에서 관리하려면 Directory.Packages.props를 사용합니다.

Directory.Packages.props:

<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="System.CommandLine" Version="2.0.1" />
<PackageVersion Include="Spectre.Console" Version="0.54.0" />
<PackageVersion Include="PublicApiGenerator" Version="11.5.4" />
</ItemGroup>
</Project>

이렇게 설정하면 스크립트에서 버전 없이 패키지를 참조할 수 있습니다:

#r "nuget: Spectre.Console" // 버전 생략 가능

Q1: .NET 10 이전 버전의 SDK로는 File-based App을 실행할 수 없나요?

섹션 제목: “Q1: .NET 10 이전 버전의 SDK로는 File-based App을 실행할 수 없나요?”

A: 실행할 수 없습니다. File-based App(dotnet MyScript.cs)은 .NET 10에서 처음 도입된 기능이므로, 반드시 .NET 10.x 이상의 SDK가 필요합니다. 이전 버전에서는 dotnet new console로 프로젝트를 생성해야 합니다.

Q2: Directory.Build.propsDirectory.Packages.props를 함께 사용하면 어떤 장점이 있나요?

섹션 제목: “Q2: Directory.Build.props와 Directory.Packages.props를 함께 사용하면 어떤 장점이 있나요?”

A: Directory.Build.propsTargetFramework, Nullable 같은 공통 빌드 설정을 적용하고, Directory.Packages.props는 NuGet 패키지 버전을 중앙에서 관리합니다. 두 파일을 함께 사용하면 여러 File-based App에서 일관된 빌드 환경과 패키지 버전을 유지할 수 있어, 스크립트 간 버전 충돌을 방지합니다.

Q3: File-based App에서 NuGet 패키지를 참조하는 #r 지시자와 #:package 지시자는 어떻게 다른가요?

섹션 제목: “Q3: File-based App에서 NuGet 패키지를 참조하는 #r 지시자와 #:package 지시자는 어떻게 다른가요?”

A: #r "nuget: PackageName, Version"은 초기 프리뷰에서 사용되던 형식이고, #:package PackageName@Version은 .NET 10 정식 출시 시점의 새로운 형식입니다. 두 형식 모두 동작하지만, #:package가 공식 권장 형식입니다. 이 튜토리얼의 실제 스크립트에서는 #:package 형식을 사용합니다.

Q4: 다음 절에서는 무엇을 다루나요?

섹션 제목: “Q4: 다음 절에서는 무엇을 다루나요?”

A: .NET 10 스크립트를 실행하는 AI 도구인 Claude Code를 소개합니다. 설치 방법, 기본 사용법, 사용자 정의 Command의 개념과 /release-note 명령어의 구조를 살펴봅니다.

이제 .NET 10 환경이 준비되었으니, 다음으로 이 스크립트들을 실행할 AI 도구인 Claude Code를 살펴보겠습니다.