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

Asp.net 如何在web服务器和映像服务器之间拆分web应用程序的部署,asp.net,visual-studio-2010,deployment,msdeploy,webdeploy,Asp.net,Visual Studio 2010,Deployment,Msdeploy,Webdeploy,我有一个ASP.NET3.5Web应用程序项目。我想将它的大部分部署到我的web服务器,但我想将CSS、图像和JavaScript部署到第二个“图像服务器” 如何使用Web部署,甚至Visual Studio 2010及更高版本的“发布”功能来实现这一点 有人问我试过什么。我什么都没试过,因为我不知道有什么可以试的 我过去在web部署方面做过一些认真的工作。我甚至使用WebDeploy来部署非Web应用程序,方法是将适当的目标手动添加到项目文件中。我有MSBUILD书籍(“”,作者Sayed

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

如何使用Web部署,甚至Visual Studio 2010及更高版本的“发布”功能来实现这一点


有人问我试过什么。我什么都没试过,因为我不知道有什么可以试的

我过去在web部署方面做过一些认真的工作。我甚至使用WebDeploy来部署非Web应用程序,方法是将适当的目标手动添加到项目文件中。我有MSBUILD书籍(“”,作者Sayed Ibrahim Hashimi和William Bartholomew)和,并且知道如何向MSDEPLOY包中添加不在项目中的额外文件、添加文件夹和设置访问保护等

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


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

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

  • 有两种解决方案配置:“Release”和“ReleaseImage”。“Images”项目不会在“Release”配置中生成,“normal”项目也不会在“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>
    
    现在,您将拥有一个Application.zip和一个Content.zip(包括
    .deploy.cmd
    脚本),可以将其部署到两个web服务器上


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

    我不同意在这个问题上投反对票。但是有几个人在挑剔。@Mysticial:谢谢你提供的信息。我不聊天,所以我不知道。我本以为他们会在这里讨论。@Aristos:是的,我想我假设读者要么对MSDEPLOY有所了解,要么认识到他们一无所知,并避免投反对票!没有什么可以尝试的。没有一个内置的概念将一个项目转移到多个服务器。没有只发布网站一部分的内置概念。实际上没有什么可以尝试的。事实证明,没有人提出过像“哦,所以我想你不知道某某”这样的讽刺概念。@Aristos:对不起,我指的是“讽刺评论”,而不是“讽刺概念”。这没有直接关系,但可能会有帮助。谢谢。这正是我需要的东西。出于某种原因,我从未想过编辑发布配置文件。我忘了它们是MSBUILD格式的。我在VS2010中使用了它。需要注意的是,它需要。顺便说一句,你也可以使用
    <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>