2012-02-17 95 views
3

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

我将远程服务器配置为在我的IIS Web应用程序('exampleapp')下有一个虚拟目录'/ n2',并在Package/Publish Web设置中配置了此路径(IIS网站/应用程序名称目标服务器)在我的Visual Studio项目中。

要生成部署包:

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> 

任何人有一个线索,为什么虚拟目录被转化为虚拟应用?

回答

4

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

< DeployAsIisApp条件= “ '$(DeployAsIisApp)' == ''” >真</DeployAsIisApp >

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

http://msdn.microsoft.com/en-us/library/ff398069.aspx

+0

嗯设置DeployAsIisApp为false时,它似乎工作,但现在MsDeploy没有“得到”指定的部署目录实际上是驻留在别处的虚拟目录。 ( 错误:当'setAcl'提供程序与物理路径一起使用时,必须指定'setAclUser'设置的值 )。 – 2012-02-21 09:09:43

+1

我也看到< IncludeSetAclProviderOnDestination Condition =“'(IncludeSetAclProviderOnDestination)'==''”> True </IncludeSetAclProviderOnDestination >在目标文件中,所以我猜你可以关闭它。 – tdykstra 2012-02-22 22:37:01

+0

在我的.csproj中将IncludeSetAclProviderOnDestination设置为false时,错误消失了。但是,错误似乎源于这样的事实:默认情况下,将DeployAsIisApp设置为False时,SetParameters.xml中的“IIS Web应用程序名称”后缀(本地)文件路径(服务器上不存在该文件路径)。将其更正为服务器路径解决了问题(使用IncludeSetAclProviderOnDestination = False)。 – 2012-02-27 10:29:56

3

我有与部署参数如下组合(的csproj)的成功,而不将其标记为IIS应用程序发布的Web应用程序项目(WAP)的虚拟目录时:

<DeployOnBuild>True</DeployOnBuild> 
<DeployAsIisApp>False</DeployAsIisApp> 
<DeployIisAppPhysicalPath>MyWebSite/MyVirtualDirectory</DeployIisAppPhysicalPath>