Visual Studio使用哪个清单来生成msdeploy包?

4

我希望在CI流程的最后,使用msdeploy.exe将一个文件夹打包为zip并存储到指定目录。以下是命令行:

msdeploy.exe -verb:sync -source:contentpath="C:\SampleWebApp" -dest:package="c:\SampleWebApp.zip" -declareParamFile="parameters.xml" 

我也喜欢msbuild生成的*.deploy.cmd和*.SetParameters.xml文件,它们与部署包一起生成。我重新命名了一组*.deploy.cmd和*.SetParameters.xml文件,并相应地更改了内容,以便在部署环境中运行。

当我运行*.deploy.cmd文件时,它生成了一个名为"C:\SampleWebApp"的文件夹,而不是根据.SetParameter.xml文件提供的参数创建iis应用程序。

经过一些调查,我发现.cmd部署到-dest:auto,这很好。但显然我的包中的包清单表明该包是contentPath,而由msbuild生成的包具有更复杂的清单,在包内的archive.xml中使用iisApp提供程序。

看了以下文章后:

http://blogs.msdn.com/b/webdev/archive/2013/01/09/real-scenario-folder-deployment-scenarios-with-msdeploy.aspx

我认为如果我使用正确的Package.xml和-source:manifest="Package.xml",最终结果应该类似于VS包输出。

我认为*.SourceManifest.xml可能是包的清单。我尝试使用它构建包,但当我想要使用.deploy.cmd部署时,它抱怨setAclUser。

错误:使用物理路径时,必须指定“setAclUser”设置的值,当使用“setAcl”提供程序时。

有人知道msbuild使用的是什么清单吗?

2个回答

3
以下是清单模板。
<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <iisApp path="[PATH1]"/>
</sitemanifest>

和Parameter.xml模板


<parameters>
  <parameter name="IIS Web Application Name" defaultValue="WEBSITENAME" tags="IisApp">
    <parameterEntry kind="ProviderPath" scope="IisApp" match="^[PATH1ESCAPED]$" />
  </parameter>
  <!-- appSetting section-->
</parameters>

注意:[PATH1]应替换为您的文件夹路径,例如C:\MY.FOLDER\WWW,而[PATH1ESCAPED]应该是相同的路径,但使用前缀和后缀^ $进行转义,例如^C:\MY.FOLDER\WWW$。
然后您可以调用。
"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:manifest="Manifest.xml" -dest:package=%1 -declareParamFile="parameters.xml" 

而 %1 是文件夹的路径,例如 C:\MY.FOLDER\WWW


3
直接回答您的问题:清单是根据 MsDeploySourceManifest MSBuild 项目动态生成的。
您可以在发布配置文件中声明 DeployAsIisApp=false(或命令行 /p:DeployAsIisApp=false),使其使用 contentPath 而不是 iisApp。这也将禁用 setAcl 提供程序。
如果您想保留 iisApp,则可以通过以下方式禁用 ACL 提供程序:
1. 在发布配置文件中声明 IncludeSetAclProviderOnDestination=false,以防止其被添加到包中。 2. 通过将 /I:False 传递给 deploy.cmd 来禁用部署。

谢谢 Richard,但我认为我已经找到了正确的manifest.xml和parameter.xml,请看我的回答。 - Ahmadreza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接