Web包:如何强制MSBuild使用MSDeploy.IisApp而不是sitemanifest?

时间:2018-03-26 21:03:58

标签: iis msbuild msdeploy

如何强制MSBuild创建使用iisApp Provider应用程序路径的Web包,例如“默认网站/目录”?

我的构建过程是创建一个使用目录路径的包(C:\ Agent \ _work \ 28 \ s \ Catalog)。

我试图在我的MSBuild命令中添加“/ p:DeployAsIisApp = True”,但这似乎没有什么区别。

如果我将虚拟目录设置为我的Visual Studio 2017解决方案文件夹,然后Export a Package through IIS Manager,则会按照我期望的方式创建包。

我比较了MSBuild和IIS Export之间的archive.xml文件。这是一些部分输出:

的MSBuild:

<sitemanifest MSDeploy.ObjectResolver.createApp= ...>
  <iisApp path="C:\Agent\_work\28\s\Catalog ...>
  ...
</sitemanifest>

IIS导出:

<MSDeploy.IisApp MSDeploy.ObjectResolver.createApp= ...>
  <iisApp path="Default Web Site/Catalog" ...>
  ...
</MSDeploy.IisApp />

因此,当MSBuild正在创建sitemanifest时,IIS正在导出MSDeploy.IisApp。

如何让MSBuild与IIS导出相匹配?我正在使用VSTS构建系统,我传递给MSBuild的参数是:

MSBuild /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:PackageLocation="$(build.artifactstagingdirectory)\Catalog" /p:IncludeSetAclProviderOnDestination=False

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我遇到的具体问题是日志中的一行如下所示:

Verbose: Parameter entry 'IIS Web Application Name/1' could not be applied anywhere.

Parameters.xml就是这个(破碎):

<parameters>
  <parameter name="IIS Web Application Name"
         description="Full site path where you want to install the Catalog Application (for example, Default Web Site/Catalog)."
         defaultValue="Default Web Site/Catalog"
         tags="IisApp">
  <parameterEntry kind="ProviderPath" scope="iisApp" match="@defaultValue" />
</parameter>

我将match属性设置为空字符串。然后一切都按预期开始工作。工作:

<parameters>
  <parameter name="IIS Web Application Name"
         description="Full site path where you want to install the Catalog Application (for example, Default Web Site/Catalog)."
         defaultValue="Default Web Site/Catalog"
         tags="IisApp">
  <parameterEntry kind="ProviderPath" scope="iisApp" match="" />
</parameter>