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

标签 asp.net visual-studio-2010 deployment msdeploy webdeploy

我有一个 ASP.NET 3.5 Web 应用程序项目。我想将其中的大部分部署到我的 Web 服务器,但我想将 CSS、图像和 JavaScript 部署到第二个“图像服务器”。

如何使用 Web Deploy 或什至 Visual Studio 2010 及更高版本的“发布”功能执行此操作?

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

过去我在 web 部署方面做了一些认真的工作。我什至使用 Web Deploy 来部署非 Web 应用程序,方法是将适当的目标手动添加到项目文件中。我有 MSBUILD 书(“Inside the Microsoft® Build Engine: Using MSBuild and Team Foundation Build”,作者 Sayed Ibrahim Hashimi 和 William Bartholomew)和 Supplement ,并知道如何执行诸如将不在项目中的额外文件添加到 MSDEPLOY 包、添加文件夹和设置访问保护等操作。

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

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

Visual Studio 中的发布配置文件不仅包括有关发布哪些文件和发布到哪个目的地的信息;它还包括要构建和部署的解决方案配置。我可以

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

  • 我想不出实用 做我需要做的事情的方式。我希望有人知道我不知道的实用技术——也许是我不知道的 Web Deploy 3.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>
    

    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>
    

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

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

    关于asp.net - 如何在 Web 和图像服务器之间拆分 Web 应用程序的部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055744/

    相关文章:

    asp.net - 从 ASP.NET 应用程序调试 HTTP 模块初始化事件

    c++ - Release模式下只执行部分代码

    asp.net - 部署 ASP.Net Web 应用程序的好方法是什么?

    .net - 带有 redis-sharp 客户端的 MSOpenTech redis

    c# - 为什么我的 C# 应用程序在多线程单元上运行?

    .net - 更新或版本控制 Web 服务的策略?

    git - 推送时自动从 GitHub 部署到服务器

    java - 选择 : Migrating from Classic ASP to . NET 或迁移到开源平台

    asp.net - "simple"Web 应用程序安装程序(IIS 虚拟应用程序 + sql server 数据库设置)

    c# - 这是否符合任何已知的设计模式?