諸般の事情により、ASP.NET Web Fromsのアプリケーションの発行をコマンドラインから行いたくなった為、MSBuildでやってみました。
色々やり方はあると思うのですが、xmlファイルに設定を記述してMSBuild.exeに食わせて実行する形で、今回は試行錯誤してみました。とりあえず私のやりたいことは満たせてると思っているのですが、ツッコミとかアドバイスをいただけると助かりますので、よろしくお願いします。
前提
今回は以下を前提にやっています。多分、VS2008以降のASP.NETならほぼそのまま行けるんじゃないかと思います。
- VSのバージョン
- Visual Studio 2010
- プロジェクトテンプレート
- ASP.NET Webアプリケーションプロジェクト
- .NETのバージョン
- 4
MSBuildファイル
以下の内容でファイルを作ります。ファイル名は今回は「myBuild.xml」にしていますが、拡張子含めてなんでも良いと思います(というかMSBuildファイルの標準的な拡張子ってなんなんでしょうか?) ファイル名は任意で良くとりあえず今回は「myBuild.proj」とします。文字コードはxml宣言と合わせてください(utf-8が無難と思います)。
追記:
設定ファイルはprojで終わる拡張子にすると、MSBuildがカレントディレクトリから自動検索して実行してくるそうです。
id:ladybug さん、ありがとうございます。
なお、今回は以下を例にしているので、適宜読み替えてください。
- ソリューションファイルのフルパス
- C:\Users\kiyokura\Documents\Prj\WebApp1\WebApp1.sln
- プロジェクトファイルのフルパス
- C:\Users\kiyokura\Documents\Prj\WebApp1\WebApp1\WebApp1.csproj
- 出力先(発行先)フォルダ
- C:\Users\kiyokura\Deploy\WebApp1
- ファイル名
myBuild.xmlmyBuild.proj
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Run" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <!-- 該当のソリューションファイル(sln)を指定 --> <SolutionFile>C:\Users\kiyokura\Documents\Prj\WebApp1\WebApp1.sln</SolutionFile> <!-- 該当Webアプリケーションプロジェクトのプロジェクトファイル(vbproj or csproj)を指定 --> <WebAppProjectFile>C:\Users\kiyokura\Documents\Prj\WebApp1\WebApp1\WebApp1.csproj</WebAppProjectFile> <!-- 出力のフォルダを指定 --> <DeployFolder>C:\Users\kiyokura\Deploy\WebApp1</DeployFolder> </PropertyGroup> <Target Name="Run"> <CallTarget Targets="Build"/> <CallTarget Targets="Publish"/> </Target> <Target Name="Build"> <MSBuild Projects="$(SolutionFile)" Properties="Configuration=Release;" Targets="Clean;Build" /> </Target> <Target Name="Publish"> <RemoveDir Directories="$(DeployFolder)" ContinueOnError="true" /> <MSBuild Projects="$(WebAppProjectFile)" Targets="_WPPCopyWebApplication;ResolveReferences;" Properties="Configuration=Release; WebProjectOutputDir=$(DeployFolder); OutDir=$(DeployFolder)\bin/" /> </Target> </Project>
MSBuildの実行
ここまでできれば実行は簡単です。MSBuild.exeの第一パラメータに上記のファイルを指定るだけです。MSBuild.exeはMicrosoft.NET\Framework\の各バージョンの下なんかにありますので、例えばコマンドプロンプトを開いてmyBuild.projと同じディレクトリに移動し、
C:\> C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild myBuild.proj
発行の度に実行すると思いますので、上記をそのままバッチファイルにしておくと楽かもしれません。
参考&謝辞
今回、下記のサイトを参考にさせていただきました。ありがとうございました。
- MSBuild完全攻略(前編)(@IT)
http://www.atmarkit.co.jp/fdotnet/special/msbuild01/msbuild01_01.html - MSBuildリファレンス(MSDN)
http://msdn.microsoft.com/ja-jp/library/0k6kkbsd%28v=vs.100%29.aspx - How do I publish a Asp.net web application using MSBuild?(stackoverflow)
http://stackoverflow.com/questions/48550/how-do-i-publish-a-asp-net-web-application-using-msbuild - [.net]MSBuildでASP.NETのプロジェクトを発行(どこかで働くプログラマーの日記)
http://d.hatena.ne.jp/iox/20091201/p1