如何在web服务器和映像服务器之间拆分web应用程序的部署



我有一个ASP.NET 3.5 web应用程序项目。我想把它的大部分部署到我的web服务器上,但我想把CSS、图像和JavaScript部署到第二个"图像服务器"上。

如何使用Web Deploy,甚至Visual Studio 2010及更高版本的"发布"功能来完成此操作?


有些人问我试过什么。我没有尝试过任何东西,因为我不知道有什么可以尝试的。

我过去在web部署方面做过一些认真的工作。我甚至使用WebDeploy来部署非Web应用程序,方法是手动将适当的目标添加到项目文件中。我有MSBUILD的书(Sayed Ibrahim Hashimi和William Bartholomew的《微软®构建引擎内部:使用MSBUILD和Team Foundation Build》)和增刊,我知道如何在MSDEPLOY包中添加项目中没有的额外文件,以及添加文件夹和设置访问保护等。

我所做的知道如何从一个项目中制作两个包,然后将这两个包部署到两个独立的服务器上。


以下是我可以尝试的两件事。在我(是的,专家)看来,两者都不值得花时间。我很乐意有人告诉我哪里错了。

Visual Studio中的发布配置文件不仅包括要发布的文件以及发布到的目标的信息;它还包括要构建和部署的解决方案配置。我可以选择

  1. 有两种解决方案配置:"Release"one_answers"ReleaseImage"。"Images"项目不会在"Release"配置中生成,"normal"项目也不会在"ReleaseImage"配置中创建。"正常"项目的发布配置文件将构建"Release"配置,图像的发布配置将构建"ReleaseImage"配置。我不应该说,如果图像、CSS和JavaScript与使用它的代码不在同一个项目中,那将是多么痛苦
  2. 与第一个类似,但将所有内容都保存在一个项目中。这一次,使用两种配置,手动编辑.csproj文件,以便在包含内容的ItemGroup元素上放置条件。实际上,单个项目将变成两个项目,具体取决于解决方案配置。我不必说明每次向项目中添加新项时都必须手动编辑项目文件是多么不切实际

我想不出任何实用的方法来做我需要做的事情。我希望有人知道一个我不知道的实用技术——也许是我不知道Web Deploy 3.5的一些功能。

这应该像创建两个不同的发布配置文件"PackageApplication"one_answers"PackageContent"一样简单,这两个配置文件都是"Web Deploy Package"配置文件。

那么,这只是为你不想要的东西定义ExcludeFromPackageFiles项目的问题。

PackageApplication.pubxml看起来像这样:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>Package</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<DesktopBuildPackageLocation>packageApplication.zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
<DeployIisAppPath />
<PublishDatabaseSettings>
<Objects xmlns="" />
</PublishDatabaseSettings>
</PropertyGroup>
<ItemGroup>
<ExcludeFromPackageFiles Include="**/*.js" />
<ExcludeFromPackageFiles Include="**/*.css" />
</ItemGroup>
</Project>

PackageContent.pubxml看起来像:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>Package</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<DesktopBuildPackageLocation>packageContent.zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
<DeployIisAppPath />
<PublishDatabaseSettings>
<Objects xmlns="" />
</PublishDatabaseSettings>
</PropertyGroup>
<ItemGroup>
<ExcludeFromPackageFiles Include="**/*.dll;**/*.pdb" />
<ExcludeFromPackageFiles Include="**/*.cshtml" />
<ExcludeFromPackageFiles Include="**/*.aspx;**/*.asax" />
<ExcludeFromPackageFiles Include="**/*.config" />
</ItemGroup>
</Project>

现在,您将拥有一个Application.zip和一个Content.zip(包含.deploy.cmd脚本),可以将它们部署到您的两个web服务器上。

注意事项我不完全确定MSBuild脚本是否足够智能,可以在配置文件之间切换时清除临时输出目录(out\Debug\Package\PackageTmp),因此我建议在命令行中包含/t:Clean;Build

最新更新