読者です 読者をやめる 読者になる 読者になる

MSBuildでTypeScriptをコンパイル

(TypeScript MSBuils Compile ASP.NET MVC)
TypeScriptいいですよね。TypeScript!

VisulaStudioを使用して、TypeScriptを書いていると随時コンパイルしてくれます。
特に何もしなくても、VisulaStudioから公開(2013までで言う発行)するとコンパイルしたJSファイルをコピーしてくれます。

ですが、MSBuildASP.NETのプロジェクトをビルドして発行した場合には、TypeScriptはコンパイルされずにJSファイルが作られないので、発行物を含まれません。
※恥ずかしながら後輩に指摘されるまで気づかなかった事実

ということで、MSBuildの構成ファイルの改造を開始したですが、なっかなかこれってのが出来なくてとりあえず下記の構成で行けそう。

ビルド構成ファイル

<Project ToolsVersion="4.0" DefaultTargets="Run" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
	<Target Name="Run">
		<CallTarget Targets="BuildTypeScript"/>
		<CallTarget Targets="Publish"/>
	</Target>

	<PropertyGroup>
		<ProjectDir>$(ProjectPath)</ProjectDir>
		<TypeScriptVersion>1.4</TypeScriptVersion>
	</PropertyGroup>

	<ItemGroup> 
		<TypeScriptCompile Include="$(ProjectDir)\**\*.ts" />
	</ItemGroup> 

	<Target Name="BuildTypeScript" Inputs="@(TypeScriptCompile)" Outputs="%(Identity).Dummy">
		<Message Text="@(TypeScriptCompile)" />  
		<Exec Command="&quot;$(MSBuildProgramFiles32)\Microsoft SDKs\TypeScript\$(TypeScriptVersion)\tsc&quot; -target ES5 &quot;@(TypeScriptCompile)&quot;" />
	</Target>

	<Target Name="Publish">
		<RemoveDir Directories="$(OutputPath)\"
				   ContinueOnError="true" />

		<MSBuild Projects="$(ProjectPath)\$(ProjectName)"
				 Targets="Compile;ResolveReferences;_CopyWebApplication;"
				 Properties="Configuration=Release;
	                         WebProjectOutputDir=$(OutputPath)\;
	                         OutDir=$(OutputPath)\bin/;SolutionDir=$(SolutionDir);" />
	</Target>
</Project>
<TypeScriptVersion>1.4</TypeScriptVersion> TypeScriptコンパイラのバージョンを指定する必要があります。これは固定値じゃなくて引数で受け取ったほうがよいかも
<Exec Command=""$(MS~~~ ダブルクォーテーションをエスケープして&quotと記述しています。必須です。

バッチファイル

SET msbuild="C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"
SET ProjectPath=C:\TS\Project
SET ProjectName=SampleASPNET.csproj
SET OutputPath=C:\TS\Project\Output

%msbuild% Client.App.msbuild /p:ProjectPath=%ProjectPath%;ProjectName=%ProjectName%;OutputPath=%OutputPath%

久々にMsbuildの構成ファイルをいじりました。
前々から使っている構成ファイルが秘伝のタレ状態でもちょっといろいろやりたいなーって思う反面詰め込み過ぎるとカオスるんだろうなー

MSBuild