現在ログインしていません。
新規アカウント作成
ログイン

C#スクリプト

BATファイルのようにテキストファイルに記述したC#を実行する方法を説明します。

この記事ではテキストファイルに記述したC#のことを C#スクリプト と記載します。

WindowsのBATファイルはわかりにくく機能が少ないのが難点ですが、メモ帳でいつでも編集できてすぐに実行できるところが便利です。

csiを使うとBATの代わりに便利なC#スクリプトを使って同じことができます。

この記事では、以下の内容のテキストファイルがC:\csitest\script1.csx という名前で存在している前提で、これを実行する方法を説明します。

using (System.IO.StreamWriter writer = new System.IO.StreamWriter("envlog.txt"))
{
    writer.WriteLine(Environment.OSVersion.VersionString);

    if (Environment.Is64BitOperatingSystem)
    {
        if (Environment.Is64BitProcess)
        {
            writer.WriteLine("OSは64ビットで、このプロセスも64ビットで実行されています。");
        }
        else
        {
            writer.WriteLine("OSは64ビットですが、このプロセスは64ビットで実行されていません。");
        }
    }
    else
    {
        writer.WriteLine("OSは64ビットではありません。");   
    }
}
■リスト1:C:\csitest\script1.csx

C#スクリプトの拡張子は何でも良いのですが、csxとするのが慣例のようです。[1]

Visual Studioがあるマシンでコマンドを使ってC#スクリプトを実行する方法

csi.exeのパラメーターでcsxファイルを指定するだけで実行できます。

csi.exeの場所は環境によって異なります。

Visual Studio 2017 Communityを既定の場所にインストールしている場合、csi.exeは C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csi.exe にあります。

Visual Studio 2017 Professionalの場合は、C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Roslyn\csi.exe のようです。

Visual Studio 2015 Update1以降の場合は、C:\Program Files (x86)\MSBuild\14.0\Bin\amd64\csi.exeにあります。

それ以前のVisual Studioにはcsi.exeは付属していません。

csxを実行するコマンドはたとえば次のようになります。

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csi" "C:\csitest\script1.csx"
■リスト2:

なお、Visual Studio付属の開発者コマンドプロンプトを起動するとcsiのある場所にパスが通っているので、csi.exeのフルパスを指定する必要はありません。簡略化して次のように書けます。

csi "C:\csitest\script1.csx"
■リスト3:

Visual Studioがないマシンでコマンドを使ってC#スクリプトを実行する方法

csi.exeをフォルダーごとコピーするとVisual Studioがないマシンでもcsi.exeを実行できるようです。

参考

しかし、マイクロソフトは公式には何も言っていないことから、この方法はお気楽な状況でのみ便利に使用する程度にとどめておいたほうが良さそうです。

csxファイルをダブルクリックしてC#スクリプトを実行する方法

拡張子csxとcsi.exeを関連付けることでダブルクリックだけで実行できるようにできます。

csxファイルを右クリック - 開く で「インストールされたプログラムの一覧からプログラムを選択する」を選んでOKし、次の画面で「参照」をクリックしcsi.exeを選択します。

これでそのマシン上のすべてのcsxファイルはダブルクリックだけで実行できるようになります。

ところで、拡張子の関連付けの設定はこのように簡単にできますが、関連付けを解除するには面倒なのでお気をつけください。解除方法はネットで検索すると出てきます。

Visual StudioでC#スクリプトを実行する方法

C#スクリプトをVisual Studioで開発することは可能ではありますが、本物のC#の開発のような手厚いGUIの支援を受けることはできません。ブレイクポイントを設定してステップ実行することもできません。インテリセンスも限定的です。

それでもVisual Studioで開発したい場合は、まずC#のコンソールアプリケーションプロジェクトを作成します。(実際のところはコンソールアプリケーションは必須ではありません。)

そして、プロジェクトにテキストファイルを追加して拡張子はcsxとしましょう。

このcsxファイルにC#スクリプトをプログラムしてください。たとえば、この記事の冒頭で例としてあげているようなものです。

実行する前に設定が必要です。

Visual Studioのメニューで[ツール] - [外部ツール]をクリックし、表示される外部ツールウィンドウで「追加」をクリックします。 追加する内容は以下の通りにします。コマンドに指定するcsi.exeのパスだけは環境に応じて変更してください。

外部ツールの追加
項目
タイトル C#スクリプトとして実行
コマンド C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csi.exe
引数 $(ItemFileName)$(ItemExt)
初期ディレクトリ $(ItemDir)
出力ウィンドウを使用 チェックする
起動時に引数を入力 チェックしない
Unicodeで出力を処理する チェックしない

以上で設定は完了です。csxファイルをコードエディターで開いた状態で[ツール]-[C#スクリプトとして実行]をクリックすると、csxが実行されます。

Tips

  • 外部ツールに作成した「C#スクリプトとして実行」をツールバーのボタンとして追加することもできます。例:[ツール]-[カスタマイズ]→「コマンド」→ツールバー→標準→「コマンドの追加」→ツール→長いコマンドの一覧から 外部ツールxx (xxは番号。「C#スクリプトとして実行」を外部ツールの何番目に登録したかで指定する番号が変わります。)
  • csiを使ってC#スクリプトを地区実行するだけならC#インタラクティブで簡単にできます。

C#スクリプトはバッチやPowerShellの代わりにならない

マイクロソフト発行のMSDNマガジン2016年1月号に掲載された記事「Essential .NET - C# Scripting」から引用します。日本語には私が翻訳していますのでミスがありましたら失礼します。

少なくとも今のところ、C#スクリプトはWindows PowerShell、ましてやcmd.exeを置き換えるものではありません。はじめからそのようにアプローチすると失望するでしょう。それよりも、C#スクリプトのことを、単体テストプロジェクトやdotnetfiddleのお気軽版と考えて接してみてはどうかと私は思います。

At least for now, the purpose of the C# REPL interface is not to replace Windows PowerShell or even cmd.exe. To approach it as such at the 
start will result in disappointment. Rather, I suggest you approach C# scripting and the REPL CLIs as lightweight replacements for Visual 
Studio | New Project: UnitTestProject105 or the similarly purposed dotnetfiddle.net.
■リスト4:MSDNマガジン2016年1月号 Essential .NET - C# Scriptingからの引用

  • C# REPL interface、C# scripting and the REPL CLIs を C#スクリプトを翻訳しました。

参考

  1. ^ Essential .NET - C# Scripting traditionally saved into a CSX file.

元記事

https://msdn.microsoft.com/en-us/magazine/mt614271.aspx