我遇到了一个问题,msdeploy 没有为站点的子应用程序同步应用程序池信息(例如,默认网站)。
本质上,我希望我可以创建 webdeploy/msdeploy 包作为多个开发分支的夜间构建过程的一部分,然后将这些特定于分支的包部署到服务器进行冒烟测试。一切似乎都是合理的,但不幸的是,我找不到设置已部署包的 iisApp 打算使用的应用程序池的方法。我可以创建和部署包含 appPoolConfig 提供程序的包,以支持创建应用程序池本身,但如果我无法在我正在部署的应用程序上设置应用程序池,这将毫无用处。
顺便说一句,我觉得我几乎是在重复其他看起来相似的问题。使用 appPoolconfig 或 appPoolExtension 给出了各种答案,但我对这些没有运气。根据我的阅读,appPoolConfig 用于同步应用程序池本身,而不是“分配”给应用程序的应用程序池。顺便说一句,这种类型的同步操作效果很好。至于 appPoolExtension,我不知道它在打开时实际上做了什么,因为我发现生成的包没有区别。
我可以使用一组简单的步骤重新创建问题,这些步骤仅使用 msdeploy 而没有 WPP/webdeploy/msbuild,目的是它应该单独使用最低级别的工具:
Windows 8(注意:我也可以在 Win 2008 R2 上复制该问题),安装 IIS 和 Web Deploy 3.0。
- 假设存在默认网站并安装了 .NET 4.0,请创建一个名为 TestPool 的新应用程序池。
- 在 Default Web Site 下创建一个名为 TestApp 的新应用程序,并将其应用程序池分配给在步骤 1 中创建的 TestPool。
- 打开具有对 msdeploy 的路径访问权限的命令提示符。
类型 >
msdeploy -verb:sync -source:iisApp="Default Web Site/TestApp" -dest:package=c:\temp\testapp.zip,encryptPassword="password" -enableLink:AppPoolExtension
- 现在我们有了一个包,我们可以从默认网站下删除 TestApp 并删除作为初始应用程序创建的一部分创建的任何剩余物理文件夹。
假设我们仍然在 IIS 中将 TestPool 应用程序池配置为可用池,请键入 >
msdeploy -verb:sync -source:c:\temp\testapp.zip,encryptPassword="password" -dest:iisApp="Default Web Site/TestApp" -enableLink:AppPoolExtension
- 转到 IIS Manager 并在 Default Web Site 下选择我们的 TestApp。单击 Basic Settings...,Application Pool 不是必需的 TestPool,而是为 Default Web Site 设置的默认池。
任何帮助表示赞赏。
编辑:只需对上述步骤进行变体,并在两个 msdeploy 命令行中将“iisApp”更改为“appHostConfig”,并保留应用程序池设置,因此从 msdeploy 的角度来看是成功的。但是,如果这是解决方案,如何通知 VS 2012 发布过程使用 appHostConfig 而不是 issApp?
编辑:在回答我自己的编辑时,这个答案有效:https ://stackoverflow.com/a/12741525/739097 。这引出了另一个问题,即如何在没有 IIS 的构建服务器上集成包创建,但我的想法是,首先根据所需的 IIS 设置、动态参数等创建模板包,但基本上没有内容。然后,构建过程将仅创建一个内容包,并将其与模板包同步,以创建用于部署的最终包。