#:sdk Microsoft.NET.Sdk.Web
using Microsoft.Extensions.Hosting;
var app = WebApplication.Create();
app.MapGet("/", () => "Hello, world!");
app.Run();
4.2 #:package
NuGet 패키지 참조 추가.
예: #:package Newtonsoft.Json@13.0.3
버전 와일드카드 지원: @*, @13.*, @13.0.* → 최신 해석.
#:package Newtonsoft.Json@13.0.3
using Newtonsoft.Json.Linq;
string json = @"{ ""name"": ""Alice"", ""age"": 30 }";
var obj = JObject.Parse(json);
string name = (string)obj["name"]; int age = (int)obj["age"];
Console.WriteLine($"{name} is {age} years old.");
4.3 #:property
프로젝트 속성(TargetFramework, LangVersion 등) 지정.
C# 14 확장 everything 기능(예시 코드) 사용 위해 프리뷰에서 두 속성 모두 필요.
#:property TargetFramework=net10.0
#:property LangVersion=preview
var s = "this is a long string that needs to be truncated".AsSpan().Truncate(20);
Console.WriteLine(s.ToString());
static class ExtensionMethods {
// C# 14 syntax
extension<T>(ReadOnlySpan<T> span) {
public ReadOnlySpan<T> Truncate(int maxLength) {
return span.Length <= maxLength ? span : span.Slice(0, maxLength);
}
}
}
가상 프로젝트 구성: Microsoft.DotNet.Cli.Commands.Run.VirtualProjectBuildingCommand
기존 C# 스크립팅/경량 실행 도구: CS-Script, dotnet-script, Cake, LinqPad
플랫폼 비교 언급: Node.js, Python (단일 파일 학습 경험 문맥)
커뮤니티 의견 출처: Reddit (EntroperZero 코멘트)
11. 실용 팁 & 주의사항 (본문 기반)
프리뷰 경고: 프리뷰 기능 사용 중이므로 안정성 고려 필요.
재실행 속도: 동일 임시 디렉터리 재사용으로 첫 실행 후 빌드/복원 시간 대폭 감소 (Restore 0.3초, Build 1.2초 사례).
확장 문법(C# 14) 사용 시 반드시 TargetFramework=net10.0, LangVersion=preview 지정 또는 Directory.Build.props 활용.
NuGet 버전 관리: 버전 와일드카드(*, 13.*, 13.0.*)는 최신 버전으로 자동 해석.
Unix 전용 기능: Shebang 실행은 Unix-like 환경에서만 유효하며 실행 전 chmod +x 필요.
임시 디렉터리 관찰: 이전 실행 DLL(Newtonsoft.Json 등)이 잔존할 수 있어 구성 추적에 유용.
프로젝트 확장 필요 시: dotnet project convert app.cs로 손쉽게 정식 프로젝트 구조 전환.
12. 코드 스니펫 모음 (원문 발췌)
12.1 Minimal API
#:sdk Microsoft.NET.Sdk.Web
using Microsoft.Extensions.Hosting;
var app = WebApplication.Create();
app.MapGet("/", () => "Hello, world!");
app.Run();
12.2 Newtonsoft.Json 사용
#:package Newtonsoft.Json@13.0.3
using Newtonsoft.Json.Linq;
string json = @"{ ""name"": ""Alice"", ""age"": 30 }";
var obj = JObject.Parse(json);
string name = (string)obj["name"]; int age = (int)obj["age"];
Console.WriteLine($"{name} is {age} years old.");
12.3 C# 14 확장 everything 예시
#:property TargetFramework=net10.0
#:property LangVersion=preview
var s = "this is a long string that needs to be truncated".AsSpan().Truncate(20);
Console.WriteLine(s.ToString());
static class ExtensionMethods {
extension<T>(ReadOnlySpan<T> span) {
public ReadOnlySpan<T> Truncate(int maxLength) {
return span.Length <= maxLength ? span : span.Slice(0, maxLength);
}
}
}
12.4 프로젝트 참조
#:project .\MyClassLibrary\MyClassLibrary\MyClassLibrary.csproj
using MyClassLibrary;
Class1.Method();
12.5 Shebang (Unix)
#!/usr/bin/dotnet run // (Unix-like only)
Console.WriteLine("Hello, world");
13. 핵심 포인트 강조
단일 파일 실행:dotnet run app.cs 로 즉시 실행.
지시문 기반 구성: SDK/패키지/속성/프로젝트 참조를 코드 파일 안에서 선언.
재사용 캐시: 임시 디렉터리 재활용으로 반복 빌드 속도 향상.
프리뷰 요구: C# 14 문법은 LangVersion=preview 필요.
확장 경로: 필요 시 dotnet project convert app.cs 로 손쉬운 프로젝트 전환.