今回はフォームを作れるか試してみます。
ソース
using System;
using System.Windows.Forms;
class FormSample {
[STAThread]
static void Main() {
Form form = new Form();
Application.Run(form);
}
}
テキストエディタに貼り付けて保存します。
コンパイル
powershell.exeから実行
PS H:\csharp\formsample> csc /t:winexe .\ソースファイル.cs
オプションで/t:winexeを追加しています。少しするとコンパイルが終了し前回と同様に.exeファイルが出来上がります。 実行してみるとフォームが表示されました。
ソースファイルが複数の場合
ファイル名:MyForm.cs
using System.Windows.Forms;
public class MyForm : Form {
}
ファイル名:ManySource.cs
using System;
using System.Windows.Forms;
class ManySource {
[STAThread]
static void Main() {
Form form = new MyForm();
Application.Run(form);
}
}
先のフォームを作成するプログラムを無理やり分割してみました。
MyForm.csはSystem.Windows.Formsを継承したMyFormクラスを定義しています。メソッドやプロパティは一切定義していないので、機能的にはSystem.Windows.Formsと多分同じはずです。
ManySource.csはアプリケーションのエントリーポイントになります。
コンパイル
PS>csc /t:winexe /out:ManySource.exe ManySource.cs MyForm.cs
成功するとManySource.exeが出来上がります。実行すると先程のサンプルと同様に空のフォームが表示されます。
MSBuildを使ってビルドする。
ファイル名:ManySource.csproj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AssemblyName>BaseForm</AssemblyName>
<OutputPath>Bin\</OutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="*.cs"/>
</ItemGroup>
<Target Name="Build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe">
<MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
<Csc Sources="@(Compile)" TargetType="winexe" OutputAssembly="$(OutputPath)$(AssemblyName).exe"/>
</Target>
<Target Name="Clean" >
<Delete Files="$(OutputPath)$(AssemblyName).exe" />
</Target>
<Target Name="Rebuild" DependsOnTargets="Clean;Build" />
<Target Name="Run" DependsOnTargets="Rebuild">
<Exec Command="$(OutputPath)$(AssemblyName).exe" />
</Target>
</Project>
MSBuildのチュートリアルを参考にというかほぼそのままですが、プロジェクトファイルを作成しました。
ItemGroupのCompile Includeにワイルドカードで.csを指定することで同一ディレクトリ内の全てのソースファイルを対象にしています。
ちなみにIncludeで指定したワイルドカードから除外したいソースがある場合はExcludeで除外出来ます。
面倒なのでワイルドカードにしていますが、ソースファイルの数分だけCompile Include=”ソースのパス”を記述することでコンパイルするソースファイルを限定することが出来ます。
ソースファイルと同じディレクトリにプロジェクトファイルを保存
ビルド
PS>msbuild /t:build
プロジェクトファイルと同じディレクトリで上記コマンドを実行
binディレクトリを作成しそのディレクトリにManySource.exeを作成
クリーン
PS>msbuild /t:clean
bin\ManySource.exeを削除
リビルド
PS>msbuild /t:rebuild
clean、buildを順番に実行
実行
PS>msbuild /t:run
rebuild後生成されたexeファイルを実行
コメント