dotnet run file.cs (ファイルベースアプリケーションの実行)
.NET Frameworkや.NETのプログラムを作成するためには少なくともプロジェクトファイル(.csproj)とソースファイル(.cs)が必要でしたが、.NET 10以降ではファイルベースアプリケーションと呼ばれる新しい仕組みが導入され、プロジェクトファイルを作成せずにソースファイルのみでアプリケーションを実行できるようになりました。この仕組みを利用することで、実験コードや小規模なアプリケーションを素早く作成し、実行することが可能になります。
前提条件
-
.NET 10 Preview 4 SDK以降がインストールされていること
-
Visual Studio CodeおよびC# Dev Kitがインストールされていること
実行方法
ファイルベースアプリケーションを実行するには、以下のコマンドを使用します。
dotnet run <ファイル名>
例えば、以下の簡単なOpenAPIベースのコードを含むapp.csというファイルを作成したとします。
#: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();
このファイルを実行する場合は、コマンドプロンプトで次のように入力するだけです。
dotnet run app.cs

このように、ファイルベースアプリケーションを簡単に実行することができます。個人的には、サンプルコードを紹介する際にもプロジェクト設定や依存関係の説明を省略できるため、学習やデモの場面などで特に便利に感じています。
#:ディレクティブ
ファイルベースアプリケーションでは、#:ディレクティブを使用してプロジェクトの設定や依存関係を指定することができます。上記の例では2つの#:ディレクティブが使用されていますが、現在以下の4つのディレクティブが用意されています。
| ディレクティブ | 説明 |
|---|---|
#:sdk | 使用するSDKを指定します。例えば、#:sdk Microsoft.NET.Sdk.Webを指定するとWebアプリケーションとして扱われます。プロジェクトファイルで<Project Sdk="Microsoft.NET.Sdk.Web">を指定することと同等です。 |
#:property | プロジェクトのプロパティを指定します。例えば、#:property TargetFramework=net10.0や#:property LangVersion=previewを指定した場合、プロジェクトファイルで<TargetFramework>net10.0</TargetFramework>や<LangVersion>preview</LangVersion>を指定することと同等です。 |
#:package | NuGetパッケージを指定します。例えば、#:package Microsoft.AspNetCore.OpenApi@10.*-*を指定すると、Microsoft.AspNetCore.OpenApiNuGetパッケージの参照が追加されます。<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.*-*"/>を指定することと同等です。 |
#:project | 参照するプロジェクトを指定します。例えば、#:project ../MyLibraryのように相対パスで指定できます。<ProjectReference Include="../MyLibrary/MyLibrary.csproj"/>を指定することと同等です。 |
#:ディレクティブはファイルの先頭に記述する必要があります。.NET CLIはこれらのディレクティブを解析して仮想プロジェクトを生成し、仮想プロジェクトとしてビルドします。また、これらのディレクティブはC#コンパイラーが処理できないため、.NET CLIによって削除されたソースコードがコンパイラーに渡されます。
#!ディレクティブ
ファイルベースアプリケーションでは、#!ディレクティブを使用してスクリプトの実行環境を指定することもできます。これは主にLinuxやmacOSなどのUnix系システムで使用されるshebangをサポートするためのもので、#:ディレクティブと同様に.NET CLIによって削除されたソースコードがC#コンパイラーに渡されます。
#!/usr/bin/dotnet run
Console.WriteLine("Hello");
chmod +x app.cs
./app.cs
ファイルベースアプリケーションからプロジェクトベースアプリケーションに変換する
dotnet project convert app.csコマンドを使用すると、ファイルベースアプリケーションをプロジェクトベースアプリケーションに変換することができます。このコマンドは、ファイルベースアプリケーションのソースコードからプロジェクトファイル(*.csproj)を生成し、必要な依存関係を追加します。