我有一个 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 中的发布配置文件不仅包括有关发布哪些文件和发布到哪个目的地的信息;它还包括要构建和部署的解决方案配置。我可以
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/