Ответ 1
Для дальнейшего использования я нашел именно то, что требуется для включения развертываний для чего-либо, кроме веб-сервисов/проектов. Причина, по которой параметр DeployOnBuild ничего не делает для чего-либо, кроме веб-проектов, заключается в том, что файл проекта должен включать в себя webapplication.targets, а также PropertyGroup, содержащий путь к VSToolsPath.
Эта ссылка дала мне хорошее представление о том, как работают веб-развертывания и как интегрировать это в мой проект для развертывания сервисов:
-
Для передачи параметров в MSBuild вам необходим файл.pubxml (называемый профилем публикации) в папке PublishProfiles в папке свойств вашего проекта.
-
Мне нужно следующее в.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" />
-
Если вам нужны команды pre-sync/post-sync для MSDeploy, к сожалению, их нет в 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>