2013-08-21 89 views
3

我想要将包含msdeploy.exe的文件夹打包到CI过程结束时的压缩目标。 我运行下面的命令行视觉工作室使用什么清单来生成msdeploy包

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

我也喜欢* .deploy.cmd和* .SetParameters.xml当它吐出部署包,其产生的msbuild。我重命名了一组* .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:清单=“package.xml中”右package.xml中最终的结果应该是类似VS包输出

我想也许* .SourceManifest.xml是包的清单。我用它构建一个软件包,但是当我要部署到使用.deploy.cmd它抱怨setAclUser

Error: A value for the 'setAclUser' setting must be specified when the 'setAcl' provider is used with a physical path.

有谁知道这是清单的MSBuild使用?

回答

2

要直接回答您的问题:清单是基于MsDeploySourceManifest MSBuild项目动态生成的。

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

如果你想保持iisApp,您可以禁用ACL商...

  1. ...被添加到包在您发布配置
  2. 声明IncludeSetAclProviderOnDestination=false ...通过展开经过/I:Falsedeploy.cmd
+0

感谢理查德,但我想我已经找到了正确的清单。 xml和parameter.xml请参阅我的答案 – Ahmadreza

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。夹\ WWW $

然后就可以调用像C

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:manifest="Manifest.xml" -dest:package=%1 -declareParamFile="parameters.xml" 

和1%是文件夹路径:\ MY.FOLDER \ WWW