鉴于已使用WebDeploy部署到其实时服务器的ASP.NET Web应用程序,如何将该应用程序的子集部署到另一台服务器?
例如
这是为了仅为静态内容创建单独的无Cookie网站。
只有一个发布配置文件可以吗?或者我是否需要创建两个发布配置文件?
甚至可以创建一个只部署webapp静态部分的发布配置文件(〜/ Content目录中的所有内容)?
两台目标服务器都是在Windows 2008 64bit上运行的II7.5
答案 0 :(得分:1)
您可以使用两个发布配置文件执行此操作。这将涉及为每个配置文件跳过(with caveats if performing the deployment from within Visual Studio)适当的内容。
但是,我建议您对应用程序服务器进行完全部署,然后使用runCommand
提供程序执行批处理文件。
为此,您可以在发布配置文件中定义以下内容:
<ItemGroup>
<AfterAddIisSettingAndFileContentsToSourceManifest>
$(AfterAddIisSettingAndFileContentsToSourceManifest);
AddContentDeploymentToSourceManifest;
</AfterAddIisSettingAndFileContentsToSourceManifest>
</ItemGroup>
<Target Name="AddContentDeploymentToSourceManifest">
<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<Path>$(MSBuildProjectDirectory)\deployContent.bat</Path>
</MsDeploySourceManifest>
</ItemGroup>
</Target>
然后,在deployContent.bat中:
REM Detect MSDeploy location (stolen from VS generated CMD)
if "%MSDeployPath%" == "" (
for /F "usebackq tokens=1,2,*" %%h in (`reg query "HKLM\SOFTWARE\Microsoft\IIS Extensions\MSDeploy" /s ^| findstr -i "InstallPath"`) do (
if /I "%%h" == "InstallPath" (
if /I "%%i" == "REG_SZ" (
if not "%%j" == "" (
if "%%~dpj" == "%%j" (
set MSDeployPath=%%j
))))))
"%MSDeployPath%mdeploy.exe" -verb:sync ^
-source:iisApp="application site name"
-dest:iisApp="static content site name",computerName=http://contentserver:8192/msdeploy.axd
-skip:File=^.*(?<!png|jpg|jpeg|css|js)$
...将站点从应用程序服务器部署到内容服务器,跳过没有预定义静态内容扩展列表的任何内容。
(仅供参考:Don't try to sent arguments to your batch file unless it already exists on the server)