VisualStudioの入っていないパソコンでC#ソースをコンパイルする

先日、ちょっとしたコードを試したかったのですが VisualStudio をインストールするほどでもないという状況がありました。Linux ならば gcc や clang が入っているのですが、Windows ではどうでしょうか?

大丈夫です Windows には元から csc.exe というコンパイラが入っているので簡単なソースならビルドできます。

コンソールアプリケーションのコンパイルの仕方と、ウインドウアプリケーションのコンパイルの仕方をご紹介します。

コンソールアプリケーションをコンパイルする

まずはテキストエディタでソースコードを作りましょう。現在の時間を表示するプログラムです。

using System;

namespace aaa
{
    class Program
    {
        static void Main(string[] args)
        {
            String str0 = "hello";
            String str1 = ",";
            String str2 = DateTime.Now.ToString();
            Console.WriteLine( str0 + str1 + str2 );
        }
    }
}

では、これを c:\tmp\aaa.cs としてファイル配置します。

次に csc.exe コンパイラを探します。あなたのマシンのどこかに必ずあります。その中でも一番新しそうな日付のやつを探し出してください。Windowsの検索は貧弱でどうしようもないので Everything という神フリーウェアをインストールして、そこから探し出したほうがいいです。

私の場合は csc.exe がマシンの中に18個もありましたが、その中で一番新しかったのは下記のディレクトリに配置されていました。パスのなかに 64 とか入っているほうのやつがいいと思います。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe

ここで c:\tmp\aaa.cs をコンパイルして、c:\tmp\aaa.exe を生成したい場合は下記のようなコマンドを PowerShell または コマンドプロンプトから実行します。

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /out:"c:\tmp\aaa.exe" "c:\tmp\aaa.cs"

これは

"コンパイラのファイルパス" /out:"エグゼのファイルパス" "ソースファイルのパス"

を示しています。ファイルパスの中に空白スペースなどが無い場合はセミコロンを書かなくてもコンパイルできます。下記のようになります。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /out:c:\tmp\aaa.exe c:\tmp\aaa.cs

csc.exe はディレクトリの深い場所に配置されているので、いちいち打ち込むのが面倒な場合は、環境変数で csc.exe までのパスをきっておくか、バッチファイルで csc.exe を実行してください。

下記のようなビルドメッセージが現れます。エラーがあったらその旨が表示されます。そもそもエラーがあった場合は aaa.exe が出来上がりません。

C:\Users\hoge>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /out:c:\tmp\aaa.exe c:\tmp\aaa.cs
Microsoft (R) Visual C# Compiler version 4.8.9232.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5,
which is no longer the latest version. For compilers that support newer versions of the C# programming language,
see http://go.microsoft.com/fwlink/?LinkID=533240

では aaa.exe を実行してみましょう。

PowerShell やコマンドプロンプトで下記のように入力してください。hello と、年月日時分秒が表示されていますね。

PS C:\tmp> ./aaa.exe
hello,2024/10/05 12:20:59

ウインドウ(フォーム)アプリケーションをコンパイルする

ウインドウアプリケーションもコンパイルできます。まずは下記のプログラムコードを準備します。

using System;
using System.Windows.Forms;

namespace aaa
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

    public partial class Form1 : Form
    {
        public Form1()
        {

        }
    }
}

ウインドウアプリケーションをコンパイルするには /target:winexe オプションを指定して実行するだけです。

PS C:\Users\hoge> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:winexe /out:c:\tmp\aaa.exe c:\tmp\aaa.cs

出来上がった aaa.exe を実行したら必要最小限のウインドウが出現することが確認できると思います。

実行結果が知りたいだけだったら mycompiler.io とか paiza.io とか、そういったオンラインサービスもありますので利用を検討してみてください。