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

Visual studio 如何通过VS&;控制用于部署的AppPool;MSDeploy设置,visual-studio,msdeploy,application-pool,Visual Studio,Msdeploy,Application Pool,为我的webapp构建部署包时,该包包含一个archive.xml文件,其中包含以下内容: <createApp applicationPool="" MSDeploy.applicationPool="1" appExists="True" MSDeploy.appExists="1" ... /> 2.parameters.xml文件自定义 似乎暗示我可以修改生成的parameters.xml文件,以便将应用程序池名称指定为msdeplo

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

<createApp
    applicationPool=""
    MSDeploy.applicationPool="1"
    appExists="True"
    MSDeploy.appExists="1"
    ... />
2.parameters.xml文件自定义 似乎暗示我可以修改生成的
parameters.xml
文件,以便将应用程序池名称指定为msdeploy的参数。此文件存在于zip包中,因此不容易自定义。如果我将其更改为存档,则该文件更易于访问

3.更改VS设置 该页面似乎暗示我可能需要从IIS Express切换到IIS,然后启用一些复选框。在“我的项目属性”页面上,无论“包括IIS Express中配置的IIS设置”复选框设置(我当前未选中)如何,都会禁用此Web项目使用的
包括应用程序池设置
复选框。接下来我将尝试切换到完整的IIS,看看这是否能让我更好地控制

4.使用cscript创建应用程序池 看起来我可能可以,但我不确定这是否只是TFS。这是一个我以前从未见过的工具,但它可能是一个有能力的工具

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

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

我还有一些研究要做,但我可以给你以下几点建议:

  • IncludeAppPool=true启用AppPoolExtension,该扩展在将网站从一个位置同步到另一个位置时也会复制应用程序池。 我想它在创建包时不会产生效果。除非您的WAP是通过本地IIS运行的,并且您的软件包中包含IIS设置

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

  • 您确实可以选中“包含此Web项目使用的应用程序池设置”(实际上:这会将msbuild属性IncludeAppPool设置为true)。清单将保存一个用于创建应用程序池的条目。但是,只有当您从本地运行WAP的计算机上创建包时,才有可能执行此操作。在使用构建服务器(我的案例)时,这不是一个选项

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

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

  • 如果我知道怎么做,我可能会给你回电话

    编辑:

    我发现您无法使用appPoolConfig提供程序打包创建新的应用程序池。我被迫编写自己的提供程序。我是基于一些(非常基本的)基础编写的我找到了一些示例,并通过逆向工程对一些现有的提供程序进行了改造。我基本上做的是创建一个包装类,调用c:\windows\system32\inetsrv\appcmd,并将此功能公开为MSDeploy提供程序。appcmd是配置iis的命令行工具,使用它可以创建AppPool…如果有人感兴趣,我可以共享som代码的e部分

    嗨,另一个编辑

    很抱歉,我花了这么长时间,但我已经将一些代码和自定义AppPoolConfigProvider放在我的skydrive上,您可以访问它 或者是一个gist回购来访问它

    若要使用此提供程序,应将编译后的dll放在可扩展性文件夹下(您必须在“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>
    
    
    @(_DefaultDeployEnvironmentSetting->'%(AppPoolName)'))
    $(DeployManagedRuntimeVersion)
    $(DeployManagedPipelineMode)
    @(uu DefaultDeployEnvironmentSetting->'%(AppPoolIdentityType)'))
    @(uuu DefaultDeployEnvironmentSetting->'%(AppPoolUserName)'))
    @(uuu DefaultDeployEnvironmentSetting->'%(AppPoolUserPassword)'))
    00:00:00
    managedRuntimeVersion;managedPipelineMode;processModel_标识类型;processModel_用户名;processModel_密码;processModel_空闲时间
    

    很抱歉,我无法详细说明这一点,但我写这段代码已经有一段时间了,我根本没有时间。您可以在网上找到一些有关创建自定义提供商的信息。如果您有其他问题,我会在有时间时尝试回答


    希望这有助于我从Visual Studio 2010 sp1 web部署c#WCF服务时遇到的麻烦,我是按照以下说明创建的:

    我得到了一个错误: 错误1 Web部署任务失败。(您尝试使用的应用程序池的“managedRuntimeVersion”属性设置为“v2.0”。此应用程序需要“v4.0”。)0 WcfService3

    由于我没有完整的IIS,但是IIS Express我不能去找经理。在与Google先生和Bing女士约会后,我盯着自己的脸找到了解决方案

    修复方法是使用显式正确的web服务名称,而不是示例中使用的默认名称

    解决方案: 首先打开IIS Express配置文件 %userprofile%\documents\IISExpress\config\applicationhost.config

    检查其中的默认站点,在我的情况下,它是:

    <site name="WebSite1" id="1" serverAutoStart="true">
      <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
      </application>
      <bindings>
        <binding protocol="http" bindingInformation=":8080:localhost" />
      </bindings>
    </site>
    
    
    

    希望这能帮助你们中的任何人避免使用搜索机进行令人沮丧的约会

    致以最良好的祝愿,
    Petteri Kujala

    您对此感到高兴吗?如果您能发布任何提示、代码片段等,我们将不胜感激。嘿,斯蒂夫,您还有机会吗
    <site name="WebSite1" id="1" serverAutoStart="true">
      <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
      </application>
      <bindings>
        <binding protocol="http" bindingInformation=":8080:localhost" />
      </bindings>
    </site>