C# で gcc のようにファイルを指定してビルドする方法

以前、 Visual C++ で gcc のようにファイルを指定してビルドする方法を紹介しました。 今回はその C# 版です。

ファイルを指定したビルドというのは、 Visual Studio のソリューションファイル(sln)やプロジェクトファイル(csproj)を使わずにコマンドラインでコンパイルすることです。
ちょっとしたサンプルプログラムを試す場合などに便利です。
また、 define を使用した条件コンパイルやエントリーポイントを指定することによって、 クラスの動作確認のコードを実行するといったことにも使えます。

C# には gcc や cl.exe(Visual C++) に相当する csc.exe という C# コンパイラーがあります。 これを使ってビルドを行います。


なお、 プロジェクトファイルを使ってコマンドライン上でビルドする場合は MsBuild を使用します。こちらの使い方については以前の記事をご覧下さい。

環境設定

csc.exe は .NET フレームワークのフォルダー にあります。
これは以下のようなパスです。 最後のフォルダー名はフレームワークのバージョンによって変わります。
c:\Windows\Microsoft.NET\Framework\v4.0.30319
このフォルダーを環境変数 Path に追加します。

ビルド方法

ビルドする場合には次のようなコマンドを実行します。
csc ソースファイル [...]
 > csc hello.cs 
hello.cs :
using System;

namespace Hello
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Hello World!");
        }
    }
}
実行すると "ソースファイルのベース名.exe"(hello.exe) がカレントフォルダーに作成されます。
複数のファイルを指定した場合にはエントリーポイント(Main メソッド) のあるソースファイルの名前が使われます。


ただし、ファイルを指定する際に一つ注意点があります。
それは csc.exe がパス区切りとして /(スラッシュ) を認識しない点です。 相対パスなどで別フォルダーのファイルを指定する場合には必ず \ を使って下さい。

コマンドオプション

よく使いそうなオプションをいくつか挙げておきます。
詳細は /? オプションのヘルプを見て下さい。
オプション 短い形式 説明
/help /? ヘルプを表示
/out:<ファイル> 出力ファイル名を指定
/target:exe /t:exe コンソール アプリケーションをビルド(既定)
/target:winexe /t:winexe GUI アプリケーションをビルド
/define:<シンボルリスト> /d 条件付きコンパイルシンボルを定義
/main:<型> /m エントリーポイントを含む型を指定 (他のエントリーポイントはすべて無視)
/warn:<n> /w 警告レベル (0-4) を設定
/codepage:<n> ソース ファイルを開くときに使用するコードページを指定
/utf8output UTF-8 エンコードでコンパイラーのメッセージを出力


関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
35位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
6位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

05月 | 2017年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。