Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MsDeploy-Can';更新应用程序池_C#_Visual Studio_Iis_Msbuild_Msdeploy - Fatal编程技术网

C# MsDeploy-Can';更新应用程序池

C# MsDeploy-Can';更新应用程序池,c#,visual-studio,iis,msbuild,msdeploy,C#,Visual Studio,Iis,Msbuild,Msdeploy,我已经浏览了几十个网站,帮助我使用MsDeploy将web服务部署到IIS。 我需要创建应用程序,修改应用程序池并启用协议,以及更新应用程序设置(包含连接字符串,不要问我为什么) 我可以做所有这些,除了应用好的应用程序池 以下是我添加到项目中的parameters.xml文件: <parameters> <parameter tags="IisApp" defaultValue="Default Web Site/MyWebService" name="IIS Web Ap

我已经浏览了几十个网站,帮助我使用MsDeploy将web服务部署到IIS。 我需要创建应用程序,修改应用程序池并启用协议,以及更新应用程序设置(包含连接字符串,不要问我为什么)

我可以做所有这些,除了应用好的应用程序池

以下是我添加到项目中的parameters.xml文件:

<parameters>
  <parameter tags="IisApp" defaultValue="Default Web Site/MyWebService" name="IIS Web Application Name">
    <parameterEntry match="@defaultValue" scope="IisApp" kind="ProviderPath"/>
    <parameterEntry match="@defaultValue" scope="setAcl" kind="ProviderPath"/>
  </parameter>
  <parameter name="Configuration Connection String" defaultValue="Some real Connection String in there" tags="">
    <parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/appSettings/add[@key='ConfigurationSQLConnectionString']/@value" />
  </parameter>
  <parameter name="Application Pool" defaultValue="MyOwnAppPool" description="Application pool for this site">
    <parameterEntry kind="DeploymentObjectAttribute" scope="application" match="/application/@applicationPool" />
  </parameter>
</parameters>
以下是生成的archive.xml文件:

<sitemanifest MSDeploy.ObjectResolver.dirPath="Microsoft.Web.Deployment.DirPathObjectResolver" MSDeploy.ObjectResolver.filePath="Microsoft.Web.Deployment.FilePathObjectResolver">
  <appHostConfig path="Default Web Site/MyWebService" MSDeploy.path="2" MSDeploy.MSDeployLinkName="Child1" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="some stuff">
    <application path="/MyWebService" MSDeploy.path="2" applicationPool="DefaultAppPool" MSDeploy.applicationPool="1" enabledProtocols="http" MSDeploy.enabledProtocols="1" serviceAutoStartEnabled="false" MSDeploy.serviceAutoStartEnabled="1" serviceAutoStartProvider="" MSDeploy.serviceAutoStartProvider="1" MSDeploy.MSDeployLinkName="PathElement" MSDeploy.MSDeployKeyAttributeName="path">
      <virtualDirectoryDefaults path="" MSDeploy.path="1" physicalPath="" MSDeploy.physicalPath="9" userName="" MSDeploy.userName="1" password="" MSDeploy.password="1" logonMethod="ClearText" MSDeploy.logonMethod="1" allowSubDirConfig="true" MSDeploy.allowSubDirConfig="1" MSDeploy.MSDeployLinkName="virtualDirectoryDefaults" />
      <virtualDirectory path="/" MSDeploy.path="2" physicalPath="C:\somewhere\MyWebService" MSDeploy.physicalPath="8" userName="" MSDeploy.userName="1" password="" MSDeploy.password="1" logonMethod="ClearText" MSDeploy.logonMethod="1" allowSubDirConfig="true" MSDeploy.allowSubDirConfig="1" MSDeploy.MSDeployKeyAttributeName="path" />
    </application>
  </appHostConfig>
  <contentPath path="C:\somewhere\MyWebService\obj\Debug\Package\PackageTmp" MSDeploy.path="2" MSDeploy.MSDeployLinkName="Child2" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="some other stuff">
    <MSDeploy.dirPath path="C:\somewhere\MyWebSerivce\obj\Debug\Package\PackageTmp" MSDeploy.MSDeployLinkName="contentPath" />
  </contentPath>
  <setAcl path="C:\somewhere\MyWebService\obj\Debug\Package\PackageTmp" MSDeploy.path="2" isDest="AA==" MSDeploy.isDest.Type="Microsoft.Web.Deployment.DeploymentObjectBooleanAttributeValue" setAclUser="" MSDeploy.setAclUser="1" setAclAccess="Read" MSDeploy.setAclAccess="1" MSDeploy.MSDeployLinkName="Child3" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="still some stuff" />
  <setAcl path="C:\somewhere\MyWebService\obj\Debug\Package\PackageTmp" MSDeploy.path="2" isDest="AA==" MSDeploy.isDest.Type="Microsoft.Web.Deployment.DeploymentObjectBooleanAttributeValue" setAclUser="anonymousAuthenticationUser" MSDeploy.setAclUser="1" setAclAccess="Read" MSDeploy.setAclAccess="1" MSDeploy.MSDeployLinkName="Child4" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="final stuff I guess" />
</sitemanifest>
我得到以下日志:

Verbose: Parameter entry 'IIS Web Application Pool Name/1' is applicable to 'sitemanifest/appHostConfig[@path='Default Web Site/MyWebService']/application[@path='/MyWebService']' because of its scope.
Verbose: Parameter entry 'Application Pool/1' is applicable to 'sitemanifest/appHostConfig[@path='Default Web Site/MyWebService']/application[@path='/MyWebService']' because of its scope.
但最后,设置的应用程序池是DefaultAppPool(而不是finalappool)。我首先认为msdeploy为参数“iisweb应用程序池名称”采用默认的应用程序池值。但它总是需要默认的AppPool。 我只是不明白为什么

如您所见,我对非管理员帐户使用基本身份验证。我已在destinationServer上激活了管理委派服务,以将contentPath、iisApp和setAcl委派给当前用户,并将createApp和appHostConfig委派给WDeployConfigWriter

我添加参数“applicationpool”的事实是。 但是,即使我只保留这两个参数中的一个(应用程序池和IIS Web应用程序池名称),第二个参数始终在archive.xml中,因为msbuild包参数includeIsSettings=true。结果是相同的

这似乎不是一个正确的问题,只要应用程序池确实是由msdeploy设置的,只是它不接受提供的应用程序池

对于启用协议,我们也有类似的问题


抱歉,篇幅太长了,但我想详细介绍一下。

不知道您是如何部署的,但您可以使用此处提到的脚本(带有postSync参数):

在此脚本中,您可以使用appcmd执行任何操作:


您完全是手动完成所有这些工作。是否可以选择使用VST来完成这些工作?您将在幕后使用msdeploy,而所需的工作量要少得多,而且最重要的是……工作正常。您到底想用应用程序池更新什么?为什么?我想知道这一点将有助于我们更好地了解您的情况。如果我理解的话正确地说,您基本上希望将应用程序部署到服务器,并在iis中创建指向您刚刚创建/部署的应用程序目录的站点/应用程序池?如果是这种情况,使用powershell将更容易。您可以远程使用powershell远程处理并复制应用程序,然后创建您需要的任何应用程序池并修改它们。在我看来,试图通过msbuild实现这一点要困难得多,因为它不是为这样的任务而构建的。
<parameters>
  <parameter name="IIS Web Application Name" defaultValue="Default Web Site/MyWebService" tags="IisApp">
    <parameterEntry kind="ProviderPath" scope="AppHostConfig" match="^Default\ Web\ Site/MyWebService$" />
    <parameterEntry kind="ProviderPath" scope="contentPath" match="^C:\\somewhere\\MyWebService\\obj\\Debug\\Package\\PackageTmp$" />
    <parameterEntry kind="ProviderPath" scope="setAcl" match="^C:\\somewhere\\MyWebService\\obj\\Debug\\Package\\PackageTmp$" />
    <parameterEntry kind="ProviderPath" scope="IisApp" match="@defaultValue" />
    <parameterEntry kind="ProviderPath" scope="setAcl" match="@defaultValue" />
  </parameter>
  <parameter name="IIS Web Application Pool Name" defaultValue="DefaultAppPool">
    <parameterEntry kind="DeploymentObjectAttribute" scope="application" match="application[@applicationPool='DefaultAppPool']/@applicationPool" />
  </parameter>
  <parameter name="IisVirtualDirectoryPhysicalPath" defaultValue="C:\somewhere\MyWebService" tags="PhysicalPath">
    <parameterEntry kind="DestinationVirtualDirectory" scope=".*" match="^C:\\somewhere\\MyWebService$" />
  </parameter>
  <parameter name="Configuration Connection String" defaultValue="Some real Connection String in there">
    <parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/appSettings/add[@key='ConfigurationSQLConnectionString']/@value" />
  </parameter>
  <parameter name="Application Pool" description="Application pool for this site" defaultValue="MyOwnAppPool">
    <parameterEntry kind="DeploymentObjectAttribute" scope="application" match="/application/@applicationPool" />
  </parameter>
</parameters>
msdeploy.exe -verb:sync -allowUntrusted -enableLink:AppPoolExtension -source:package="c:\somewhere\Package.zip" -dest:auto,computerName="https://destinationserver:8172/MsDeploy.axd?site=WebSite_Deployment",userName="destinationserver\deploymentUser",password="shouldKeepItSecret",authType="basic" -setParam:name="IIS Web Application Name",value="WebSite_Deployment/MyWebService" -setParam:name="Configuration Connection String",value="The Real Connection String" -setParam:name="Application Pool",value="FinalAppPool" -setParam:name="IIS Web Application Pool Name",value="FinalAppPool" -verbose
Verbose: Parameter entry 'IIS Web Application Pool Name/1' is applicable to 'sitemanifest/appHostConfig[@path='Default Web Site/MyWebService']/application[@path='/MyWebService']' because of its scope.
Verbose: Parameter entry 'Application Pool/1' is applicable to 'sitemanifest/appHostConfig[@path='Default Web Site/MyWebService']/application[@path='/MyWebService']' because of its scope.