現在、TFSと通常のビルドプロセスアクティビティを使用してソリューションをビルドしています。ただし、デプロイメントを自動化して、リモートでサーバーにビルドおよびデプロイできるようにしたいのですが。
MSBuild引数で、展開スイッチを指定しようとしています。私のプロジェクトはWindowsサービスですが、プロジェクトのタイプ(Webプロジェクトではない)に関係なく、任意のバイナリをデプロイできることは理解しています。
現在のビルドパラメータ:
/p:DeployOnBuild=True /p:UserName=user /p:Password=password
ビルドがTFSで実行されると成功しますが、サーバーへの展開の試みと、いくつかの役立つエラーメッセージが表示されるはずですが、何も表示されません。
将来の参考のために、Webサービス/プロジェクト以外のデプロイメントを可能にするために何が必要かを正確に見つけました。 DeployOnBuildパラメータがWebプロジェクト以外に対して何もしない理由は、プロジェクトファイルにwebapplication.targetsおよびPropertyGroupへのパスを含む VSToolsPath。
このリンクは、Webデプロイメントのしくみと、これをプロジェクトに統合してサービスをデプロイする方法についての良い紹介を私にくれました。
パラメーターをMSBuildに渡すには、プロジェクトプロパティフォルダーの下のPublishProfilesフォルダー内に.pubxmlファイル(公開プロファイルと呼ばれる)が必要です。
.csprojファイルに以下が必要です:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
MSDeployのpre-sync/post-syncコマンドが必要な場合、残念ながらこれはMSBuildからは利用できません。この機能を実現するには、プロジェクトのルートフォルダー内にX.Wpp.Targets(Xはプロジェクト名)が必要です。
<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<Target Name="UninstallService" BeforeTargets="MSDeployPublish">
<!-- Do exec tasks here -->
</Target>
<Target Name="InstallService" AfterTargets="MSDeployPublish">
<!-- Do exec tasks here -->
</Target>
</Project>