我目前正在使用TFS和常规构建流程活动来构建解决方案。但是,我希望能够自动部署,这样我就可以一步到位地远程构建和部署服务器。
在MSBuild参数上,我试图指定部署开关。我的项目是一个Windows服务,但我知道无论项目类型如何(不是Web项目),仍然可以部署任何二进制文件。
当前构建参数:
/p:DeployOnBuild=True /p:UserName=user /p:Password=password
当构建在TFS中运行时,它会成功,但是我希望看到一些部署到服务器的尝试以及一些有用的错误消息,但没有显示。
答案 0 :(得分:26)
为了将来参考,我已经找到了为Web服务/项目以外的任何其他内容启用部署所需的确切内容。 DeployOnBuild 参数不对Web项目以外的任何内容执行任何操作的原因是项目文件需要包含 webapplication.targets 以及 PropertyGroup < / strong>包含 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的预同步/后同步命令,遗憾的是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>
答案 1 :(得分:-2)
您需要一种使用MSBuild部署Windows服务的方法。试试这个方法http://mrchief.calepin.co/deploying-windows-service-via-msbuild/