我想在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中有更复杂的清单。
看过以下帖子
我相信如果我使用-source:manifest =" Package.xml"使用正确的Package.xml,最终结果应该类似于VS包输出
我想也许* .SourceManifest.xml是包的清单。我使用它并构建包但当我想将它部署到使用.deploy.cmd时它会抱怨setAclUser
错误:' setAclUser'的值设置必须在。时指定 ' SETACL' provider与物理路径一起使用。
有人知道这是msbuild使用的清单吗?
答案 0 :(得分:2)
直接回答您的问题:清单是根据MsDeploySourceManifest
MSBuild项动态生成的。
您可以通过在发布配置文件(或命令行contentPath
)中声明iisApp
来使用DeployAsIisApp=false
而不是/p:DeployAsIisApp=false
。这也将禁用setAcl
提供商。
如果要保留iisApp
,可以禁用ACL提供程序...
IncludeSetAclProviderOnDestination=false
/I:False
传递给deploy.cmd
答案 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