Web将一个项目的不同部分部署到多个网站

时间:2012-10-05 01:12:49

标签: c# asp.net-mvc deployment iis-7.5 webdeploy

鉴于已使用WebDeploy部署到其实时服务器的ASP.NET Web应用程序,如何将该应用程序的子集部署到另一台服务器?

例如

  • 整个webapp /所有文件,包括静态文件 - > web部署到domain.com
  • 仅限静态文件(js,images,css) - > web部署到static.com

这是为了仅为静态内容创建单独的无Cookie网站。

只有一个发布配置文件可以吗?或者我是否需要创建两个发布配置文件?

甚至可以创建一个只部署webapp静态部分的发布配置文件(〜/ Content目录中的所有内容)?

两台目标服务器都是在Windows 2008 64bit上运行的II7.5

1 个答案:

答案 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