【发布时间】:2011-08-12 22:01:53
【问题描述】:
我有一个 VS2010 解决方案,其中包括几个 Windows 服务项目。我需要将这些服务部署为 Team Build 2010 中构建的一部分,并且 Windows 服务必须部署在多台 Windows Server 机器上。
我该怎么做?
【问题讨论】:
标签: .net deployment msbuild windows-services tfsbuild
我有一个 VS2010 解决方案,其中包括几个 Windows 服务项目。我需要将这些服务部署为 Team Build 2010 中构建的一部分,并且 Windows 服务必须部署在多台 Windows Server 机器上。
我该怎么做?
【问题讨论】:
标签: .net deployment msbuild windows-services tfsbuild
您可以有条件地从您的 Windows 服务项目文件中调用 SC.exe 命令 (*.csproj) 以在远程计算机上安装 Windows 服务。
这是一个例子:
<PropertyGroup>
<DeployWinService>false</DeployWinService>
<WinServiceName>MyService</WinServiceName>
<TargetWinServiceHost Condition="'$(TargetWinServiceHost)' == ''">localhost</TargetWinServiceHost>
</PropertyGroup>
<Target Name="AfterCompile">
<CallTarget Targets="PublishWinService" />
</Target>
<Target Name="PublishWinService"
Condition="'$(DeployWinService)' == 'true'">
<Exec Command="sc stop $(WinServiceName)" ContinueOnError="true" />
<Exec Command="sc \\$(TargetWinServiceHost) create $(WinServiceName) binpath= '$(OutDir)\$(AssemblyName).exe' start= auto" />
</Target>
这里我们定义了自定义的 MSBuild 属性DeployWinService 和TargetWinServiceHost,用于控制编译后是否将 Windows Service 项目的输出安装到哪台机器上。 WinServiceName 属性仅指定 Windows 服务在目标计算机上的名称。
在您的 构建定义 中,您必须在 Advanced 的 MSBuild Arguments 字段中明确设置 DeployWinService 和 TargetWinServiceHost 属性强>部分:
/p:DeployWinService=true;TargetWinServiceHost=MACHINENAME
相关资源:
【讨论】: