概要
以前から便利だと感じているC#のFile-based Appsですが、.NET 11では他のC#ファイルをインポートできるようになり、共通処理を分けて使いやすくなりました。C#ファイルをその場で実行する使い方から、ネイティブexeにして.NETがない環境へ持っていく使い方まで、あらためて紹介します。
説明
以前からC#のFile-based Appsが便利だと推していますが、.NET 11でさらに進化したようなので、あらためて推す記事を書いてみます。公式情報は次のページにまとまっています。
端的に言うと、C#ファイルだけで次の2つができます。プロジェクトではなく、 ~.cs ファイルだけで、です。
- C#ファイルをその場でコンパイル・実行する
- C#ファイルをネイティブexeにビルドしておき、.NETがない環境で実行する
バッチファイルやPowerShellよりもC#の方が得意なら、それらの用途を置き換えるポテンシャルがあると思います。
.NET SDKがあれば、その場で実行できる
まずは基本です。.NET SDKがある環境なら、dotnet ~.cs でC#ファイルをその場でコンパイルして実行できます。
バッチファイルのように、コードを変えてすぐ動かす使い方がしやすいです。ビルドサーバーのスクリプトなどにも使えます。
NuGetも使えるので、JSONやSQLiteを扱うような、ちょっと気合いの入った処理も書けます。NLogも使えます。
ネイティブexeにすれば、.NETがない環境でも動く
デフォルトがNative AOTなので、dotnet publishでexeにすれば、実行先に.NETがなくても動きます。追加インストールができない環境向けのツールなどに使えます。
こちらは、NuGetで参照したパッケージによってはNative AOT非対応の場合も有るので、パッケージの対応状況は要確認です。
非対応の場合でも、.NETランタイム必須で良いならば、 #:property PublishAot=false で無効化することもできます。
処理を別ファイルに分けて使える
ここからは最近のアップデートです。他のC#ファイルを #:include でインポートできるようになりました。
例えば、APIの認証処理だけを1つのファイルにまとめておき、APIを呼ぶ薄いC#ファイルを目的ごとに作る、といった使い方ができます。これで、同じ処理のコピペがだいぶ減りました。
これは .NET 11 の開発中に発表されましたが、ありがたいことに .NET 10 にもさっそく実装されたので、すぐに使えます。
普通のクラスライブラリのテストコードにも使える
.NET 11 では、ビルド済みのクラスライブラリも #:include でインポート出来るようになりました。
なので、例えば開発しているプロダクトのクラスライブラリに対して、それを呼び出して使う実験用コードだけパパッと書く、という使い方もできます。パラメータを変えたい場合も、C#のコードを直接書き換えて実行するという手が使えます。大量のコンボボックスやラジオボタンが付いたテストGUIアプリを作るより、だいぶ楽だと思います。
(.NET 11はRCになりましたがまだGAではないので注意)
C#使いにお勧めです
私はもう、開発・管理用ツールはだいたいFile-based Appsで書いていて、PowerShellなどはほとんど使っていません。
その場でコードを変えて実行する使い方も、ネイティブexeにして.NETがない環境へ持っていく使い方もできます。さらに、共通処理を別ファイルやプロジェクトに分けて使えるようになり、だいぶ便利になりました。
C#が得意な方は、使ってみると良いと思います!
