MSBuild

Visual C#がインストールされていない環境で、WindowsだけでC#の開発を行う方法について

からなんかウチのネタ元ページにチビチビと人が来ている。
いや、プログラミングに興味を持つ人が増えるのならキッカケなんて何でもいいと思うけーが…
しかし画像だらけで私的にはゲンナリするけど今時の人はこんな感じの解説を望んでいるのかな?
まあそれは関係なくて。

つまり
カレントディレクトリに sln か csproj があれば msbuild コマンドでビルドができるわけです。

単発小物なら csc コマンドに直渡しのほうが簡単だけど少し複雑になるとコッチのほうが楽。
csc コマンドでは XAML のビルドはできないけど csproj を使えば可能になる。
絶対に Visual Studio なんか使いたくないという意地っ張りなところが素敵な人もいる。
GNU make のように利用したい Linux 脳丸出しな人もいる。

ということで、実は MSBuild ならもっとイイ方法がある。

.NETビルド・エンジン「MSBuild」使いこなし術 ? @IT

上記に手段が書いているけど環境変数は単一インスタンス内で追加できる。
何かする毎に環境変数を書き換えるなんて面倒だからその方法を利用する。

実は msbuild コマンドのみでカレントディレクトリの sln, csproj を勝手に見つけてくれる。
GNU make の Makefile と同じ、つまり引数は不要。

MSBuildToolsPath って何?
MSBuild で特定の .NET Framework を対象にする
よく解らないけど WPF はこの指定が無いとビルドできなかった。

と、これだけ理解できれば EmEditor 等の外部ツールで MSBuild が使えると解る。

GNOME 上で Gedit を使い C, Makefile を作成し Ctrl+F8 を行うのと同じことができます。
解説が逆だろと言わない、筆者のメインマシンは Fedora です(Windows7 はミニノート)

残念なことに秀丸や EmEditor は複数行の外部ツールは使えないので bat を作って利用する。
複数行コマンドが利用できるエディタ(あるのか?)なら bat の内容を直書きでいいと思う。
で Windows7,8 に最初から入っている .NET 3.5 を使う手段まで。

一応書くとこのミニノートに Visual Studio は入れていません。
環境変数もデフォルトの状態に戻し再起動を行った状態で以下をやってみる。

@set PATH=%PATH%;%WINDIR%\Microsoft.Net\Framework\v3.5
@set MSBuildToolsPath=%WINDIR%\Microsoft.NET\Framework\v3.5
msbuild
pause

という内容で build35.bat みたいな名前でバッチファイルをまず作成。
.NET 4.0 を使うなら 3.5 を 4.0.30319 に変えて build40.bat なんかに。
これをテキストエディタの外部ツールに登録する。
下記は EmEditor の例、カレントディレクトリの指定に注意。

emediter_set

秀丸なら [プログラム実行] に bat へのフルパスを書き込むだけ。
フルパス取得には minipoli でも使ってくださいw
その他エディタは知らない、まともなプログラマーならこの二択もしくは両方だし。

登録したら MSDN のサンプルコードで試してみよう。
チュートリアル: MSBuild プロジェクト ファイルのゼロからの作成

コピペで helloworld.cs と test.csproj を作成。
helloworld.cs をエディタで開いている状態で外部ツールを実行。

build

普通に exe が作成されるのが解りますね。
日本語を使うなら cs, xaml ファイルはすべて BOM 付き UTF-8 で保存してください。
csc は BOM が無い場合はローケルと同じ文字コードとみなすはずですけど一応。

WPF だと構成ファイルや csproj が超複雑になるので zip で置いておく。
[SDK が見つからない] 警告を出さない方法は残念ながら解らない…
wpf_csproj.zip

VC# を持っているなら csproj と同じディレクトリにある C# コードを開いて外部ツールを実行すればビルドできると確認できる。
これで環境変数すら弄くらなくてもテキストエディタから一発ビルドできる環境の完成。

MSBuild
しかしそのプロジェクトファイルが複雑すぎて手書きで作るのが面倒くさい!
proj ファイルを簡単に作るジェネレータとかどこかに無いかな。

Microsoft としては Visual Studio を買ってほしいのだろうけどさ。
プログラミングに慣れると IDE なんて鬱陶しいだけなんだって。
普段使っているテキストエディタのみ、かつ環境変数すら弄くらないことに意義がある。

それって…
結論、やっぱり Linux で Python のほうがイイ。