Visual Studio用于生成msdeploy包的清单

时间:2013-08-21 13:54:40

标签: manifest msdeploy

我想在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是包的清单。我使用它并构建包但当我想将它部署到使用.deploy.cmd时它会抱怨setAclUser

  

错误:' setAclUser'的值设置必须在。时指定   ' SETACL' provider与物理路径一起使用。

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

2 个答案:

答案 0 :(得分:2)

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

您可以通过在发布配置文件(或命令行contentPath)中声明iisApp来使用DeployAsIisApp=false而不是/p:DeployAsIisApp=false。这也将禁用setAcl提供商。

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

  1. ...通过在您的发布配置文件中声明IncludeSetAclProviderOnDestination=false
  2. 来添加到包中
  3. ...通过将/I:False传递给deploy.cmd
  4. 进行部署

答案 1 :(得分:2)

以下是清单模板

<?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]应该是相同的路径,但使用后缀和前缀^ $ like进行转义 ^ 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