C# コンパイラのないパソコンで楽に C# 実行したい
◆ ファイル共有+別パソコンで csi.exe を実行
◆ type input.cs | csi > output.txt
◆ MSBuild\14.0\Bin をフォルダをまるごとコピーしてくるだけでも csi.exe が動いた
◆ type input.cs | csi > output.txt
◆ MSBuild\14.0\Bin をフォルダをまるごとコピーしてくるだけでも csi.exe が動いた
これまでにも似たことを書いていて続きのようなもの
今のところは公式サイトのオンラインコンパイラと VisualStudio の C# interactive を使っているのが基本です
VisualStudio は重いですし軽々全部のパソコンにいれるものでもないので デスクトップパソコンにだけいれてます
ブログはノートパソコンで書いてるので 必然的に VisualStudio の C# interactive は使えません
公式サイトのオンラインコンパイラは速度など問題ないですが書くところが小さいとか ちゃんと実行するのでちょっと試すだけのコード試したいときに面倒とか 結果見たいのがいっぱいで Console.WriteLine だらけになるしでやっぱり書くのがめんどうという問題もあります
どうにか楽にコードを試せるようにしたい!と試行錯誤したところ最終的にこんな感じになりました
私の場合はノートパソコンの C:\share\ フォルダを共有するようにしてるのでそこを使いました
このフォルダに cs.txt ファイルと cs.out.txt ファイルを作ります
このファイル名に意味は無いので好きにしても大丈夫
そして VisualStudio がインストールされてるパソコンでコマンドプロンプトを開き
共有ファイルのパス適当に
やってることは まず type で cs.txt ファイルを標準出力に書き出してそれをパイプでつないで csi.exe (C# interactive) に流し込みます
そしてその結果を cs.out.txt に出力してます
VisualStudio の入ったパソコンで上のコマンドを実行します
すると cs.out.txt に結果が入っています
自分の入力は表示されないので 「>」 のあとに結果がでてきます
コードを変えてもう一度実行したくなったら cs.txt をちょっと書き換えて再度実行です
2回目以降はコマンドプロンプトで「↑, Enter」と押すだけなのでキーボードが横にあれば手を伸ばしてサッと実行できます
ファイルの変更を監視するというのもアリですが簡単にできなさそうなのでここは手動です
慣れてくれば
エディタに書き込む → 右手で「↑Enter」 → エディタのタブを切り替えると結果が見える
これだけなので快適度が高いです
良くないところは VisualStudio が入った実行用パソコンの電源をつけておかないといけないところくらい?
でもそこはこれまでも 別の方法でソースを実行用パソコンに送信して手動で C# interactive に貼り付けて結果をブログ用のパソコンに貼り付けってやってたのでマイナスにはなってません
オンラインコンパイラ使うにしても結局ほとんどの場合がローカルのエディタで下書きしてそれをコピペしてましたら手をのばす程度の負担です
理由は Console.WriteLine がめんどうだから
ここが結構重要です
どこでもスニペット展開できるフリーソフトあればそんなに困らないですが そういう環境じゃないと何度も打つのってめんどうなんです
そ れ に
もっと重要なのが REPL のオブジェクト表示です
任意のオブジェクトを Console.WriteLine で表示させるのは簡単じゃないです
ほとんどの型は ToString しても型くらいしかわからず中のデータが見えません
毎回自分でひとつひとつ取り出して表示させるか オブジェクトを渡すとリフレクションですべて取り出して表示してくれる関数を作ってそれを実行するかしないと中身がわかりません
そういう手間がいらなくて簡単に結果が見える REPL っていいですよね
場所はここ
ファイル数は 1000 以上で数十 MB あるので 5~10 秒程度はかかります
Windows 10 にインストールした VisualStudio 2015 Community についてきた(というかコンパイラ関係ではメイン)ものを Windows 7 に持ってきて問題なく動いてます
今のところは公式サイトのオンラインコンパイラと VisualStudio の C# interactive を使っているのが基本です
VisualStudio は重いですし軽々全部のパソコンにいれるものでもないので デスクトップパソコンにだけいれてます
ブログはノートパソコンで書いてるので 必然的に VisualStudio の C# interactive は使えません
公式サイトのオンラインコンパイラは速度など問題ないですが書くところが小さいとか ちゃんと実行するのでちょっと試すだけのコード試したいときに面倒とか 結果見たいのがいっぱいで Console.WriteLine だらけになるしでやっぱり書くのがめんどうという問題もあります
どうにか楽にコードを試せるようにしたい!と試行錯誤したところ最終的にこんな感じになりました
別パソコンで実行させる
まず共有フォルダを用意します私の場合はノートパソコンの C:\share\ フォルダを共有するようにしてるのでそこを使いました
このフォルダに cs.txt ファイルと cs.out.txt ファイルを作ります
このファイル名に意味は無いので好きにしても大丈夫
そして VisualStudio がインストールされてるパソコンでコマンドプロンプトを開き
type \\DESKTOP-PC\share\cs.txt | "C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe" > \\DESKTOP-PC\share\cs.out.txt
を実行します共有ファイルのパス適当に
やってることは まず type で cs.txt ファイルを標準出力に書き出してそれをパイプでつないで csi.exe (C# interactive) に流し込みます
そしてその結果を cs.out.txt に出力してます
サンプル実行
cs.txt に実行したいコードを書きますnew List<int> { 1, 2, 3 }.Concat(new List<int> {4, 5})
VisualStudio の入ったパソコンで上のコマンドを実行します
すると cs.out.txt に結果が入っています
Microsoft (R) Visual C# インタラクティブ コンパイラ バージョン 1.3.1.60616
Copyright (C) Microsoft Corporation. All rights reserved.
詳細については、「#help」と入力します。
> ConcatIterator { 1, 2, 3, 4, 5 }
Copyright (C) Microsoft Corporation. All rights reserved.
詳細については、「#help」と入力します。
> ConcatIterator { 1, 2, 3, 4, 5 }
自分の入力は表示されないので 「>」 のあとに結果がでてきます
コードを変えてもう一度実行したくなったら cs.txt をちょっと書き換えて再度実行です
2回目以降はコマンドプロンプトで「↑, Enter」と押すだけなのでキーボードが横にあれば手を伸ばしてサッと実行できます
ファイルの変更を監視するというのもアリですが簡単にできなさそうなのでここは手動です
慣れてくれば
エディタに書き込む → 右手で「↑Enter」 → エディタのタブを切り替えると結果が見える
これだけなので快適度が高いです
良くないところは VisualStudio が入った実行用パソコンの電源をつけておかないといけないところくらい?
でもそこはこれまでも 別の方法でソースを実行用パソコンに送信して手動で C# interactive に貼り付けて結果をブログ用のパソコンに貼り付けってやってたのでマイナスにはなってません
オンラインコンパイラ使うにしても結局ほとんどの場合がローカルのエディタで下書きしてそれをコピペしてましたら手をのばす程度の負担です
なんで Interactive?
VisualStudio 入ったパソコンで実行するなら通常のコンパイル+実行というのもできますがあえてcsi.exe で Interactive 実行してます理由は Console.WriteLine がめんどうだから
ここが結構重要です
どこでもスニペット展開できるフリーソフトあればそんなに困らないですが そういう環境じゃないと何度も打つのってめんどうなんです
そ れ に
もっと重要なのが REPL のオブジェクト表示です
new List<string> { "a", "b" }
と打ち込むとList<string>(2) { "a", "b" }
と返って来ます任意のオブジェクトを Console.WriteLine で表示させるのは簡単じゃないです
ほとんどの型は ToString しても型くらいしかわからず中のデータが見えません
毎回自分でひとつひとつ取り出して表示させるか オブジェクトを渡すとリフレクションですべて取り出して表示してくれる関数を作ってそれを実行するかしないと中身がわかりません
そういう手間がいらなくて簡単に結果が見える REPL っていいですよね
一応……
VisualStudio のインストールは時間かかるしファイルサイズは重いし ってインストールする気が起きないものですが 実は csi.exe があるフォルダをフォルダごとコピーしてくればそのパソコンで csi.exe が動くんです場所はここ
C:\Program Files (x86)\MSBuild\14.0\Bin\
ファイル数は 1000 以上で数十 MB あるので 5~10 秒程度はかかります
Windows 10 にインストールした VisualStudio 2015 Community についてきた(というかコンパイラ関係ではメイン)ものを Windows 7 に持ってきて問題なく動いてます