どうも、こんにちは。
あおとです。
PowerShell で Windows 内にインストールされている一番新しいバージョンの .NET Framework の C# のコンパイラを呼び出し、C# のソース ファイルを EXE にコンパイルするコマンドをご紹介します。
2021 年の記事ですが、 .NET Core や .NET 5 ではないです。ごめんなさい。
更新すると言いつつ、この頃全く更新ができていなかったため、久々に更新します。
書くことに意義がある、というスタンスの記事のため、役に立つ内容かどうかは取り敢えず一旦横においておくとして。
結論
$SourceFile="example.cs" $LatestVersionCSharpCompilerPath=(Get-ChildItem "C:\Windows\Microsoft.NET\Framework\v*\csc.exe" | ForEach-Object { $_.FullName } | Sort-Object)[-1] Invoke-Expression ($LatestVersionCSharpCompilerPath + " " + $SourceFile)
この 3 行で C# のコンパイラを探してソース ファイルをコンパイルします。
1 行目: $SourceFile="example.cs"
至ってシンプルです。C# のソース ファイルを指定します。フルパスでも良いですし、パラメータで受け取る形にしてあげても OK。
2 行目: $LatestVersionCSharpCompilerPath= ~ (略)
C# のコンパイラ "csc.exe" を検索します。
検索と言っても場所は大体決まっているため、条件に合う csc.exe を列挙したのち、パスをソートし一番最新のモノを引っ張り出しています。
3 行目: Invoke-Expression ~ (略)
コンパイラを実行します。
csc.exe には他のアセンブリ (DLL) の参照や、出力されるアセンブリのタイプを指定するオプションが存在しますが、
例えばプロンプト画面 (黒窓) を使用しない Windows Forms などのアプリをコンパイルする場合は、下記のような形で指定ができます。
Invoke-Expression ($LatestVersionCSharpCompilerPath + " -t:winexe " + $SourceFile)
csc.exe のオプションに関しては、下記記事を参照されたし。
カテゴリ別の C# コンパイラ オプションの一覧 | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/listed-by-category
以上。