WPF 入門

ホーム > WPF の基本 > WPFプログラムを C# コンパイラでビルドする

WPFプログラムを C# コンパイラでビルドする

WPF を利用するプログラムを、Visual Studio を利用せずに開発してみましょう。

Visual Studio を使わないでスタートするというのは、私がよくやる方法です。

なぜそんなことをするかというと、 Visual Studio を利用すると裏側でサポート用のコードが大量生成されたり、 あるいは初期の ASP.NET プロジェクトのように Visual Studio 専用のディレクティブなどがあったりして、どこが本当にそのテクノロジ専用の部分で、 どこが Visual Studio のお助け機能なのか区別できないからです。

逆に Visual Studio を利用しなければ、Visual Studio が何かするというのは当然ありえないわけで、純粋に 「自分の書いたコードと SDK のビルドツール」 という組み合わせでものを考えることができます。

コンパイラ等に興味がある方はもう少し突き進むのかもしれませんが、私のスタンスとしては、SDK 以下は掘り下げないので、これで OK ということになります。

さて、前置きが長くなりましたが Visual Studio なしでどこまでいけるかやってみましょう。

先に結論を言うと、Windows Forms と違って WPF の Visual Studio のヘルプは非常に薄いことがわかりました。これも私が WPF を大変気に入った点のひとつです。

C# コンパイラでプログラムを作成

WPF のプログラムは System.Windows.Application が元となります。なので、System.Windows.Application のインスタンスを作って、さらにウィンドウを関連付けして起動する、というところまでを目標にしてコードを書いてみましょう。

まずウィンドウのクラスを定義しましょう。次のように System.Windows.Window クラスから派生した MainWindow を作ります。ここではとりあえず何もしません。

using System;
using System.Windows;

namespace TestApp {
	public class MainWindow : Window {
		public MainWindow() {
		}
	}
}

これを MainWindow.cs として保存します。

次に Main.cs として次のコードを保存します。

using System;
using System.Windows;

namespace TestApp {
	public class App1 {
		[STAThread]
		public static void Main() {
			Application app = new Application();
			MainWindow window = new MainWindow();
			window.Show();
			app.Run(window);
		}
	}
}

ここでは Application (System.Windows.Application) のインスタンスを生成して、それを実行するだけです。

WPF のメインスレッドは STA (Single Threaded Apartment) に入っていないといけないことになっているので、STAThread としています。

C# コンパイラによる WPF プログラムのビルド

誰の環境でもそうなっているのか、私の環境だけなのかよくわかりませんでしたが、参照設定すべきアセンブリは C:\Program Files\Reference Assemblies 以下に入っていて、 ビルド時に参照設定が必要だったので、次のように環境変数 REFPATH にアセンブリの入っているディレクトリを指定しています。

必要に応じて参照設定を行ってください。

SET REFPATH=C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
csc /t:winexe /r:"%REFPATH%\PresentationCore.dll" /r:"%REFPATH%\PresentationFramework.dll" 
/r:"%REFPATH%\WindowsBase.dll" main.cs mainwindow.cs

この結果 main.exe ができました。

実行すると確かに次のようなウィンドウが表示されました。

WPF プログラムの作成

では次に、WPF らしく XAML を使った場合を考えて見ましょう。

ホーム > WPF の基本 > WPFプログラムを C# コンパイラでビルドする