C# 파일을 dotnet run app.cs로 직접 실행하는 방법

1 day ago 3

  • .NET 10 Preview 4 버전에서는 dotnet run app.cs 명령어로 C# 파일을 직접 실행할 수 있음
  • 이제 별도의 프로젝트 파일 없이 빠르게 스크립트 실행, 실험, 테스트 코드 작성이 가능해짐
  • NuGet 패키지 참조, SDK와 MSBuild 속성 지정, shebang 지원 등 다양한 파일 내 디렉티브 제공됨
  • 코드가 복잡해질 경우 한 명령어로 프로젝트 기반 앱으로 자연스럽게 변환할 수 있음
  • 기존 dotnet-script 등 서드파티 도구 없이 동일한 C# 환경에서 손쉽게 스크립팅 경험 확장 가능함

간편한 C# 시작: dotnet run app.cs 소개

.NET 10 Preview 4에서 새롭게 선보인 기능으로, 이제 dotnet run app.cs 명령만으로 C# 파일을 직접 실행할 수 있는 방식이 도입됨
이로 인해 빠른 스크립트 테스트나 아이디어 실험, 코딩 실습 등을 프로젝트 파일(.csproj) 없이도 즉시 시작 가능함
이 방식은 직관적이고 간단한 경험으로, 특히 C# 입문자에게 적합함

  • 기존에는 dotnet CLI로 C# 코드를 실행하려면 반드시 프로젝트 구조와 .csproj 파일이 필요했음
  • 파일 기반 앱(File-based app) 방식에선 .cs 파일 하나로 바로 실행 가능하며, Python이나 JavaScript처럼 스크립팅 용도로도 활용 가능함
  • 진입장벽이 크게 낮아져 C# 학습, 프로토타이핑, 자동화 활용도가 증가함

주요 특징

  • 빠른 시작, 프로젝트 파일 불필요: 소규모 스크립트나 실험에 최적화된 환경 제공
  • CLI 완전 통합: 추가 도구 없이 dotnet과 .cs 파일만으로 동작
  • 애플리케이션 성장 지원: 동일한 언어, 문법, 도구로 파일이 커지면 쉽게 프로젝트로 확장 가능함

파일 기반 C# 앱을 위한 새로운 파일 수준 디렉티브

.NET 10 Preview 4는 파일 기반 앱에서 간단한 파일 내 디렉티브를 도입해 프로젝트 수준의 주요 설정을 .cs 파일 안에서 바로 지정할 수 있게 함
이 덕분에 MSBuild 개념과 호환되며 유연함이 향상됨

NuGet 패키지 참조: #:package

  • .cs 파일 내에 아래와 같이 NuGet 패키지를 직접 참조 가능함

    #:package Humanizer@2.14.1 using Humanizer; var dotNet9Released = DateTimeOffset.Parse("2024-12-03"); var since = DateTimeOffset.Now - dotNet9Released; Console.WriteLine($"It has been {since.Humanize()} since .NET 9 was released.");

SDK 지정: #:sdk

  • 기본 SDK는 Microsoft.NET.Sdk이나, 웹 API 등 특화 앱의 경우 아래처럼 SDK 변경 가능함

    #:sdk Microsoft.NET.Sdk.Web
  • 이를 통해 ASP.NET Core의 Minimal API, MVC 등 웹 기능 활성화 가능함

MSBuild 속성 설정: #:property

  • 빌드 속성을 추가하고 싶을 때 아래와 같이 지정 가능함

    #:property LangVersion preview
  • 언어 기능이나 플랫폼 타깃을 프로젝트 파일 없이 지정 가능함

쉘 스크립트 실행을 위한 Shebang 지원

  • Unix 계열 시스템에서 shebang(#!)을 활용해 C# 파일을 완전한 스크립트로 실행 가능함

    #!/usr/bin/dotnet run Console.WriteLine("Hello from a C# script!");
  • 실행 권한 부여 후 바로 실행 가능함

    chmod +x app.cs ./app.cs
  • 프로젝트 준비 없이 다양한 CLI 유틸리티, 자동화 스크립트 등의 개발 가능함

파일 기반 앱의 프로젝트 전환

파일 기반 앱이 대형화되거나 프로젝트의 확장 기능이 필요해지면, 아래 명령어로 쉽게 일반적인 프로젝트로 전환 가능함

dotnet project convert app.cs
  • 이 명령은 파일 이름 기반 새 디렉토리 생성, .csproj 파일과 코드 이동, 디렉티브를 MSBuild 속성 및 참조로 변환함

예시

#:sdk Microsoft.NET.Sdk.Web #:package Microsoft.AspNetCore.OpenApi@10.*-* var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapGet("/", () => "Hello, world!"); app.Run();
  • 위 단일 파일로 아래와 같은 .csproj 파일이 자동 생성됨
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net10.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.*-*" /> </ItemGroup> </Project>
  • 단일 파일에서 완전한 프로젝트·빌드·확장 환경으로 매끄러운 전이 지원

기존의 .NET 무프로젝트 실행 방법과의 차이

기존에도 CS-Script, dotnet-script, Cake 등 서드파티 툴을 통해 프로젝트 없이 C#을 실행하는 환경이 있었음
이런 도구들은 여전히 강력하며 고도화된 워크플로에 적합함
그러나 이제 내장 기능으로 즉시, 별도 설치 없이 시작할 수 있고
별도의 C# 변형이나 새로운 모드가 아닌 동일한 언어, 동일 컴파일러 기반임
즉, 코드를 작성하면서 그대로 프로젝트화가 자연스럽게 연결됨

시작 방법

  1. .NET 10 Preview 4 설치
    • dotnet.microsoft.com에서 다운로드 및 설치
  2. Visual Studio Code 설치 권장
    • C# Dev Kit 및 최신 C# 확장(pre-release, 2.79.8 이상) 설치
  3. 코드 작성
    • 예: hello.cs 파일 생성 후 Console.WriteLine("Hello, world!");
  4. 실행
    • 터미널에서 dotnet run hello.cs
  5. 프로젝트 전환
    • 필요시 dotnet project convert hello.cs

추가 정보

  • Microsoft Build 데모 세션YouTube 영상 참고 시 실제 동작 및 전환 과정 시연 확인 가능함

앞으로의 계획

dotnet run app.cs를 통해 빠르고 쉬운 C# 입문이 가능하면서도, .NET 생태계의 모든 강력한 기능을 그대로 보장함
향후 Visual Studio Code에서 파일 수준 디렉티브에 대한 IntelliSense, 성능, 디버깅 개선다중 파일 지원, 실행 속도 향상 같은 기능 추가 예정임
.NET 10과 함께 피드백을 제공하면, 이 경험을 계속 발전시킬 예정임

Read Entire Article