【问题标题】:How to include app pool specification in asp.net deploy script?如何在 asp.net 部署脚本中包含应用程序池规范?
【发布时间】:2014-06-17 22:02:50
【问题描述】:

我有一个 MSBuild 脚本,它正在为我的 Web 应用程序生成部署脚本。

Project.build (摘录)

<MSBuild Projects="xxxxx.sln" Properties="
                CreatePackageOnPublish=true;
                DeployOnBuild=true;
                IncludeIisSettings=true;
                IncludeAppPool=true;" >
  <Output TaskParameter="TargetOutputs" ItemName="CompiledAssembly" />
</MSBuild>

执行此操作时,它会在输出中生成一个 Package 文件夹,其中包含一个部署 .cmd 文件和关联的 .zip 文件。

xxxx.SetParameters.xml (生成)

<?xml version="1.0" encoding="utf-8"?>
<parameters>
  <setParameter name="IIS Web Application Name" value="Default Web Site\xxxxx" />
  <setParameter name="DefaultConnection-Web.config Connection String" 
         value=" ... snipped ..." />
</parameters>

如您所见,此处没有提及应用程序池。同样,在生成的 xxxx.zip\parameters.xml 中提到了应用程序池

当我执行xxxxxx.deploy.cmd /Y 时,它会在 IIS 中正确创建应用程序。问题是,它似乎使用了机器的默认应用程序池。它是一个 .net 4 应用程序,因此如果默认为 .net 2,应用程序将无法运行。

有没有办法让部署脚本包含应用程序池定义,这样就不需要手动更改应用程序池来运行?

我确实找到了this question,,这似乎是一样的。但是,如您所见,我已经包含了该问题的答案,但没有任何效果。

【问题讨论】:

    标签: asp.net iis msbuild webdeploy


    【解决方案1】:

    如果您尝试将 4.0 应用程序部署到 2.0 默认应用程序池而不提供覆盖,则它不会运行失败但部署失败,MSDeploy 将无法预先创建虚拟应用程序并出现 ERROR_APPPOOL_VERSION_MISMATCH 错误。

    IncludeAppPool 是正确的属性,但它只告诉打包程序包含设置,您必须提供源,即具有正确应用程序池的“主”虚拟应用程序要从中复制。

    打开项目属性并从IIS Express 切换到Local IIS,这将在打包/发布选项下启用应用程序池标志。我相信你以后可以切换回来,设置会保留。

    这基本上会做两件事,添加&lt;IncludeAppPool&gt;true&lt;/IncludeAppPool&gt; 以及在&lt;WebProjectProperties&gt; 部分下添加主应用程序。现在,当您构建或打包时,您的源清单将没有 managedRuntimeVersion 要求,但您的参数现在将有 IIS Web Application Pool Name 进行自定义。

    如果您想实际创建一个新的应用程序池,那么它会变得很棘手。我不知道在创建 iisApp 期间或使用一些 MSBuild 标志创建它的方法,但是使用 MSDeploy(.cmd 背后的工具)需要转储本地池并与 appPoolConfig 同步提供者,可能作为.cmd 调用之前的.build 脚本的一部分。

    msdeploy -verb:sync -source:appPoolConfig=Foo -dest:package=foo.zip
    msdeploy -verb:sync -source:package=foo.zip -dest:appPoolConfig=Foo,computerName=Bar
    

    请记住,如果不指定单独的 appPoolConfig,同步会破坏其他池,因此请先使用 -whatIf,以防万一。

    您可以尝试将您的包的archive.xmlarchive.xml 与应用程序池定义合并,但我无法想象它是如何工作的,以及iisAppappPoolConfig 提供程序之间的关系是什么在那里。

    编辑:您可以使用manifest providerpackageiisAppappPoolConfig 组合起来

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-28
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      相关资源
      最近更新 更多