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

Joh*_*ers 6 asp.net deployment visual-studio-2010 msdeploy webdeploy

我有一个ASP.NET 3.5 Web应用程序项目.我想将大部分内容部署到我的Web服务器上,但我想将CSS,图像和JavaScript部署到第二个"图像服务器".

如何使用Web Deploy,甚至Visual Studio 2010及更高版本的"发布"功能来实现此目的?


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

我过去在Web部署方面做过一些认真的工作.我甚至使用Web Deploy来部署非Web应用程序,方法是将相应的目标手动添加到项目文件中.我有MSBUILD书(" 在Microsoft®构建引擎内部:使用MSBuild和Team Foundation Build ",由Sayed Ibrahim Hashimi和William Bartholomew 撰写)和补充,并且知道如何处理诸如向MSDEPLOY包添加额外文件之类的内容.不在项目中,添加文件夹,设置访问保护等.

知道该怎么做是从一个项目制作两个包,然后将这两个包部署到两个单独的服务器.


这是我可以尝试的两件事.在我的(是的,专家的)意见中,既不值得花时间.我很乐意有人告诉我我错了.

Visual Studio中的发布配置文件不仅包括有关要发布的文件和目标的信息.它还包括构建和部署的解决方案配置.我也可以

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

我认为没有实际的方法可以做我需要做的事情.我希望有人知道我不了解的实用技术 - 也许是我不知道的Web Deploy 3.5的一些功能.

Ric*_*lay 5

这应该像创建两个不同的发布配置文件一样简单,"PackageApplication"和"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>package\Application.zip</DesktopBuildPackageLocation>
    <PackageAsSingleFile>true</PackageAsSingleFile>
    <DeployIisAppPath />
    <PublishDatabaseSettings>
      <Objects xmlns="" />
    </PublishDatabaseSettings>
  </PropertyGroup>

  <ItemGroup>
    <ExcludeFromPackageFiles Include="**/*.js" />
    <ExcludeFromPackageFiles Include="**/*.css" />
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

并且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>package\Content.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>
Run Code Online (Sandbox Code Playgroud)

您现在将拥有一个Application.zip和一个Content.zip(包含.deploy.cmd脚本),您可以将其部署到两个Web服务器.

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