2012-02-17 96 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>