Deployment MsDeploy虚拟目录在部署时转换为虚拟应用程序

Deployment MsDeploy虚拟目录在部署时转换为虚拟应用程序,deployment,msbuild,continuous-integration,msdeploy,n2cms,Deployment,Msbuild,Continuous Integration,Msdeploy,N2cms,为了使我的CMS正常工作,需要将其部署到www根目录下的虚拟目录中,以便它可以访问(通过反射)要管理的网站(注意:CMS=N2CMS)。使用VisualStudio“发布到Web”时,一切正常。但是,当我通过msbuild命令行生成包并发布该版本时,我的虚拟目录将转换为虚拟应用程序 我将远程服务器配置为在我的IIS web应用程序(“exampleapp”)下有一个虚拟目录“/n2”,并在Visual Studio中我的项目中的包/发布web设置(要在目标服务器上使用的IIS网站/应用程序名)中

为了使我的CMS正常工作,需要将其部署到www根目录下的虚拟目录中,以便它可以访问(通过反射)要管理的网站(注意:CMS=N2CMS)。使用VisualStudio“发布到Web”时,一切正常。但是,当我通过msbuild命令行生成包并发布该版本时,我的虚拟目录将转换为虚拟应用程序

我将远程服务器配置为在我的IIS web应用程序(“exampleapp”)下有一个虚拟目录“/n2”,并在Visual Studio中我的项目中的包/发布web设置(要在目标服务器上使用的IIS网站/应用程序名)中配置了此路径

要生成部署包,请执行以下操作:

msbuild.exe myproject.csproj /T:Package
这将生成我的代码的压缩包以及要执行的MsDeploy命令行批处理文件(标准msbuild/MsDeploy目标)

生成的SetParameters.xml包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<parameters>
  <setParameter name="IIS Web Application Name" value="exampleapp/n2" />
</parameters>

生成的SourceManifest.xml包含以下内容

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <IisApp path="C:\...shortened-path...\PackageTmp" managedRuntimeVersion="v4.0" />
  <setAcl path="C:\...shortened-path...\PackageTmp" setAclResourceType="Directory" />
  <setAcl path="C:\...shortened-path...\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
</sitemanifest>


有人知道虚拟目录转换为虚拟应用程序的原因吗?

在Microsoft.Web.Publishing.targets文件中,DeployAsiSapp默认为true:

真的

通过将其添加到项目文件或项目文件夹中的.wpp.targets文件中的相应PropertyGroup元素,您应该能够将其覆盖为false;在编辑项目文件时,请参见


当将web应用程序项目(WAP)发布到虚拟目录而不将其标记为IIS应用程序时,我成功地将以下部署参数组合(在csproj中):

<DeployOnBuild>True</DeployOnBuild>
<DeployAsIisApp>False</DeployAsIisApp>
<DeployIisAppPhysicalPath>MyWebSite/MyVirtualDirectory</DeployIisAppPhysicalPath>
True
假的
我的网站/我的虚拟目录

Hmm将DeployAsiSapp设置为false时,它似乎可以工作,但现在MsDeploy无法“获取”指定的部署目录实际上是驻留在其他地方的虚拟目录。(错误:“setAcl”提供程序与物理路径一起使用时,必须指定“setAclUser”设置的值。)我还看到目标文件中的IncludeSetAclProviderOnDestination条件=“”$(IncludeSetAclProviderOnDestination)”==“True/IncludeSetAclProviderOnDestination,所以我猜您可以关闭它。当在my.csproj中将includeSetalProviderOnDestination设置为false时,错误就消失了。但是,错误似乎源于这样一个事实:当您将DeployAsiSapp默认设置为False时,SetParameters.xml中的“IIS Web应用程序名称”以(本地)文件路径作为后缀(服务器上不存在)。将此更正为服务器路径可以解决此问题(includeSetalProviderOnDestination=False)。