C# 14 ではないけども .NET 10 からの機能。
ブログ: https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/
少なくともデモ用途としてはすっごい便利:
ufcpp-live/UfcppLiveAgenda#104 (comment)
だいぶ前からある「C# Script 方言」とは違って、普段使ってる通りの C#。
内部的にも「csproj を生成してそれを dotnet run App.csproj してる」みたいな実装。
複数ファイルコンパイル、パッケージ参照、プロジェクト参照可能。
ignored directives
そのために、C# の言語的にも #! と #: ディレクティブを追加。
csharplang 8617
(といっても「コンパイラーとしては単に無視」、「実際にそれを見てるのは SDK 側」)
#! は先頭行でないとエラー。(空行すら #! の前にあるのはダメ。)
#: も「コメントと #! を除いて一番前」でないとエラー。
基本的には dotnet run App.cs の形でビルド・実行しないと #! も #: もエラー。
(内部的に <Features>FileBasedProgram</Features> フラグを立てる構造なので、これを手書きすればビルドできちゃうけど、意味はない。)
エラーメッセージはちゃんと 「'#:' directives can be only used in file-based programs ('/feature:FileBasedProgram')」
C# 14 ではないけども .NET 10 からの機能。
ブログ: https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/
少なくともデモ用途としてはすっごい便利:
ufcpp-live/UfcppLiveAgenda#104 (comment)
だいぶ前からある「C# Script 方言」とは違って、普段使ってる通りの C#。
内部的にも「csproj を生成してそれを
dotnet run App.csprojしてる」みたいな実装。複数ファイルコンパイル、パッケージ参照、プロジェクト参照可能。
ignored directives
そのために、C# の言語的にも
#!と#:ディレクティブを追加。csharplang 8617
(といっても「コンパイラーとしては単に無視」、「実際にそれを見てるのは SDK 側」)
#!は先頭行でないとエラー。(空行すら#!の前にあるのはダメ。)#:も「コメントと#!を除いて一番前」でないとエラー。基本的には
dotnet run App.csの形でビルド・実行しないと#!も#:もエラー。(内部的に
<Features>FileBasedProgram</Features>フラグを立てる構造なので、これを手書きすればビルドできちゃうけど、意味はない。)エラーメッセージはちゃんと 「'#:' directives can be only used in file-based programs ('/feature:FileBasedProgram')」