今回は .NET 10で実装された「ファイルベースアプリ」を作成して実行する方法についてお届けします。
.NET 9以前では、コンソールで「Hello, World!」などのようなメッセージを表示するC#アプリケーションを作成・実行するには以下のファイルが必要となっています。
- プロジェクトファイル(*.csproj)
- C#ソースファイル(*.cs)
- ソリューションファイル(*.sln)(Visual Studioの場合のみプロジェクト作成時に追加)


.NET 10では、Preview 4からdotnet runコマンドを使用して直接C#ソースファイル(*.cs)を指定して実行することが可能になっています。
この単一のC#ソースファイルで作成・実行できるアプリケーションを「ファイルベースアプリ(file-based apps)」と呼びます。対照的に、以前のプロジェクトファイルが必要なアプリケーションを「プロジェクトベースアプリ(project-based app)」と呼びます。
ファイルベースアプリを実装してみる
まず、Visual Studio Codeで以下のコードを記載したC#ソースファイル(hello-world.cs)を作成します。
Console.WriteLine("Hello, World!");次に、コンソールで以下のコマンドを入力します。
dotnet run hello-world.cs実行すると以下のように出力結果が返されます。

NuGetパッケージの参照
プロジェクトベースアプリでは、NuGetパッケージの参照情報はプロジェクトファイルに追加されます。

ファイルベースアプリを実行する場合には、ソースファイル内で#:packageディレクティブを使用してパッケージ名とバージョンを指定します。例えば、DioDocs for Excel(ディオドック)のNuGetパッケージを利用する場合は以下のように記載できます。
#:package DioDocs.Excel.ja@8.2.2
using GrapeCity.Documents.Excel;
// ワークブックの作成
Workbook workbook = new Workbook();
// ワークシートの取得
IWorksheet worksheet = workbook.Worksheets[0];
// セル範囲を指定して文字列を設定
worksheet.Range["B2"].Value = "Hello, World!";
// ワークブックを保存
workbook.Save("HelloWorld.xlsx");実行すると、設定したNuGetパッケージを利用して出力結果が返されます。

別のプロジェクトを参照する
.NET 10 Preview6では外部のプロジェクトを参照できるようになっています。例えば、以下のようなコンソールにメッセージを出力するクラスライブラリのプロジェクト(ClassLib.csproj)を作成しておきます。
namespace ClassLib;
public class Class1
{
public static void SayHello()
{
Console.WriteLine("Hello from ClassLib!");
}
}
#:projectディレクティブを使用して以下のように記載します。
#:project ./ClassLib/ClassLib.csproj
ClassLib.Class1.SayHello();実行すると、設定したクラスライブラリを利用して出力結果が返されます。

Webアプリケーションの作成
ファイルベースアプリでは、デフォルトでMicrosoft.NET.Sdkを使用しますが、#:sdkディレクティブを使用してMicrosoft.NET.Sdk.Webを指定してASP.NET Coreアプリケーションを作成することも可能になっています。
#: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();アプリケーションを実行した後に、コンソールからcurlコマンドでHTTPリクエストを送信すると以下のように出力結果が返されます。

プロジェクトベースアプリに変換する
ファイルベースアプリからプロジェクトベースアプリに変換することも可能です。dotnet project convertコマンドを実行するだけで簡単に変換することができます。
dotnet project convert hello-world-web.cs実行すると指定した名前でフォルダが作成されてプロジェクトファイルも作成されます。

さいごに
ファイルベースアプリは、プロジェクトファイルが不要で単一のC#ソースファイルを実行できるので、実装したい機能の確認やテストなどで活用できそうな印象を受けました。また、C#の新しい機能や実装方法を学習する際にも利用できそうです。
なお、ファイルベースアプリは、現時点ではVisual Studio Codeにのみ対応しておりVisual Studio 2022では対応していません。今後のVisual Studio 2026では対応されるのか楽しみにしたいと思います。
