如何通过VS&MSDeploy设置控制用于部署的AppPool

Kal*_*son 21 application-pool msdeploy visual-studio

当我为webapp构建部署包时,该包包含一个archive.xml文件,其中包含以下内容:

<createApp
    applicationPool=""
    MSDeploy.applicationPool="1"
    appExists="True"
    MSDeploy.appExists="1"
    ... />
Run Code Online (Sandbox Code Playgroud)

题:

如何控制安装webapp的应用程序池,并在某些情况下创建新的应用程序池?是否有VS设置我可以更改以控制上述输出或以其他方式影响应用程序池在部署时的方式?

到目前为止我发现了什么:

1. MSBuild参数

根据一篇SO帖子,我可以通过添加以下选项告诉msbuild使用应用程序池,但我看不出生成的输出有任何区别:

/p:IncludeAppPool=true
Run Code Online (Sandbox Code Playgroud)

2.一个parameters.xml文件定制

关于为msdeploy设置应用程序池的另一篇文章似乎暗示我可能能够修改生成的parameters.xml文件,以便我可以将应用程序池名称指定为msdeploy的参数.此文件存在于zip包中,因此不容易自定义.如果我将其更改为存档,则文件更容易访问.

3.更改VS设置

HOWTO部署web应用程序页面似乎暗示我可能需要从IIS快速切换到IIS,然后再启用一些复选框.在我的项目属性页面上,Include application pool settings used by this Web project无论"在IIS Express中配置了包含IIS设置"复选框设置(我目前尚未选中),都会禁用该复选框.我将尝试切换到下一个完整的IIS,看看是否能让我更好地控制.

4.使用cscript创建应用程序池

看起来我可以用一个单独的工具创建一个应用程序池,但我不确定它是否只是TFS.这是我以前从未见过的工具,但它可能是一个功能强大的工具.

5. MSDeploy有一个appPoolConfig提供程序

MSDeploy的appPoolConfig提供程序看起来很有前途,因为我可以手动设置一个应用程序池,然后将其用作同步源,但至少它只是手动一次.

Sti*_*tif 12

我也开始研究如何实现这一目标的可能性.

我还有一些研究要做,但我可以给你以下指示:

  1. IncludeAppPool = true启用AppPoolExtension,它还会在将网站从一个位置同步到另一个位置时复制应用程序池.我想在创建包时它不起作用.除非您通过本地IIS运行WAP并且在程序包中包含IIS设置.

  2. zip文件确实存在于zip中.但是,如果将Parameters.xml文件放在WAP的根目录中,则可以指定自己的参数,这些参数将与打包时创建的VS合并.

  3. 您确实可以选中"包含此Web项目使用的应用程序池设置"(实际上:这会将msbuild属性IncludeAppPool设置为true).然后清单将包含用于创建应用程序池的条目.但是,只有从本地运行WAP的计算机创建程序包时才可以执行此操作.使用构建服务器时,这不是一个选项,这是我的情况

  4. 可以创建批处理脚本以从命令行运行msdeploy并使用AppPool提供程序创建apppool.虽然这对我来说似乎有点笨拙,因为我想在我的VS(或构建服务器)生成的包的清单中包含apppool创建

  5. 我现在正在调查是否可以使用wpp.targets文件在我的清单中插入apppoolconfig提供(更多信息在这里这里

如果我发现如何做,我可能会回复你.

编辑:

我发现您无法使用appPoolConfig提供程序打包创建新的应用程序池.我被迫写自己的提供者.我根据我发现的一些(非常基本的)示例以及对一些现有提供程序进行逆向工程来做到这一点.我基本上做的是创建一个调用c:\ windows\system32\inetsrv\appcmd的包装类,并将此函数暴露为MSDeploy提供程序.appcmd是一个配置iis的命令行工具,用它可以创建apppools ......如果有人有兴趣我可以分享一些代码......

嗨,另一个编辑

我很抱歉这花了我很长时间,但我把我的一些代码我的自定义AppPoolConfigProvider放在我的skydrive上你可以这里访问它 或者这里是一个要点访问它的要点.

要使用此提供程序,应将已编译的dll放在Extensibility文件夹下(您必须自己在"c:\ Program Files(x86)\ IIS\Microsoft Web Deploy V2"下创建它).您可以在线找到更多关于此的信息.

我在我的xxx.wpp.targets文件中使用提供程序,如下所示:

<Target Name="AddConfigAppPool" Condition="'$(RunConfigAppPool)'">
<Message Text="Adding configAppPool provider" />
<ItemGroup>
  <MsDeploySourceManifest Include="configAppPool">
    <path>@(__DefaultDeployEnvironmentSetting->'%(AppPoolName)')</path><!-- Represents the name of the AppPool, required-->
    <managedRuntimeVersion>$(DeployManagedRuntimeVersion)</managedRuntimeVersion>
    <managedPipelineMode>$(DeployManagedPipelineMode)</managedPipelineMode>
    <processModel_identityType>@(__DefaultDeployEnvironmentSetting->'%(AppPoolIdentyType)')</processModel_identityType>
    <processModel_userName>@(__DefaultDeployEnvironmentSetting->'%(AppPoolUserName)')</processModel_userName>
    <processModel_password>@(__DefaultDeployEnvironmentSetting->'%(AppPoolUserPassword)')</processModel_password>
    <processModel_idleTimeout>00:00:00</processModel_idleTimeout>
    <AdditionalProviderSettings>managedRuntimeVersion;managedPipelineMode;processModel_identityType;processModel_userName;processModel_password;processModel_idleTimeout</AdditionalProviderSettings>
    <!--Possible additional provider settings: queueLength,autoStart,enable32BitAppOnWin64,managedRuntimeVersion,managedRuntimeLoader,enableConfigurationOverride,managedPipelineMode,CLRConfigFile,passAnonymousToken,startMode,processModel_identityType,processModel_userName,processModel_password,processModel_loadUserProfile,processModel_logonType,processModel_manualGroupMembership,processModel_idleTimeout,processModel_maxProcesses,processModel_shutdownTimeLimit,processModel_startupTimeLimit,processModel_pingingEnabled,processModel_pingInterval,processModel_pingResponseTime,recycling_disallowOverlappingRotation,recycling_disallowRotationOnConfigChange,recycling_logEventOnRecycle,recycling_periodicRestart_memory,recycling_periodicRestart_privateMemory,recycling_periodicRestart_requests,recycling_periodicRestart_time,recycling_periodicRestart_schedule_[value='timespan']_value,failure_loadBalancerCapabilities,failure_orphanWorkerProcess,failure_orphanActionExe,failure_orphanActionParams,failure_rapidFailProtection,failure_rapidFailProtectionInterval,failure_rapidFailProtectionMaxCrashes,failure_autoShutdownExe,failure_autoShutdownParams,cpu_limit,cpu_action,cpu_resetInterval,cpu_smpAffinitized,cpu_smpProcessorAffinityMask,cpu_smpProcessorAffinityMask2-->      
  </MsDeploySourceManifest>    
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

对不起,我不能再详细说明了,但是自从我编写这段代码以来,我已经有一段时间没有时间了.您可以在线找到有关创建自定义提供程序的信息.如果您还有其他问题,我会在有空的时候尝试回答.

希望这可以帮助

  • 你对此有什么喜悦吗? (4认同)