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 生成的包在使用 iisApp 提供程序的包内的 archive.xml 中有更复杂的清单。

看了下面的帖子

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

我相信如果我将 -source:manifest="Package.xml" 与正确的 Package.xml 一起使用,最终结果应该类似于 VS 包输出

我想也许 *.SourceManifest.xml 是包的清单。我使用并且它构建了包但是当我想将它部署到 using .deploy.cmd 它抱怨 setAclUser

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

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

4

2 回答 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 和 [PATH1ESCAPE] 应该是相同的路径,但使用后缀和前缀 ^ $ 进行转义,例如 ^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

于 2013-09-14T03:12:20.557 回答
3

直接回答您的问题:清单是根据MsDeploySourceManifestMSBuild 项动态生成的。

您可以使用它,contentPath而不是在您的发布配置文件(或命令行)中iisApp声明。这也将禁用提供程序。DeployAsIisApp=false/p:DeployAsIisApp=falsesetAcl

如果要保留iisApp,可以禁用 ACL 提供程序...

  1. IncludeSetAclProviderOnDestination=false...通过在您的发布配置文件中声明被添加到包中
  2. ...通过传递/I:False到部署deploy.cmd
于 2013-08-21T22:57:46.893 回答