2010-11-19 292 views
6

在VS2010/IIS 7.5上開發站點時,我使用Web Deploy將站點從我的機器發佈到開發站點服務器。IIS web部署 - 創建虛擬目錄?

該網站有大約40個虛擬目錄,我想在部署期間自動創建服務器上的這些目錄。有沒有簡單的方法來做到這一點?

我正在考慮編寫一個小應用程序,它可以從文件或數據庫加載列表並按需創建它們。這些目錄在我的開發機器上有不同的物理路徑,而不是在Web服務器上,這也會引發一些問題。

+0

40個虛擬目錄?所以你有40個不同的應用程序。嗯,這似乎很多。你在開發什麼樣的網站?我知道小型託管服務提供商在服務器上的虛擬目錄少於您:-) – 2010-11-19 20:40:09

+0

不,它不是40種不同的應用程序。我正逐漸將大量(400k +行代碼和超過100,000頁)經典ASP應用程序遷移到.NET MVC。 virt文件夾讓新網站訪問現有網址上的舊內容。 – 2010-11-19 20:44:58

回答

6

如果你使用MSBuild進行web部署,你可以在.net中編寫一個CustomBuildTask,你可以用來創建你的虛擬目錄。

有很多關於如何創建和使用自定義生成任務的資源,但這裏是我使用使用自定義生成任務,以創建一個虛擬目錄代碼:

public void CreateVirtualDirectory() 
{ 

    DirectoryEntry oDE = new DirectoryEntry("IIS://" + 
      this._strServerName + "/W3SVC/" + _webSiteID + "/Root"); 


    //Get Default Web Site 
    DirectoryEntries oDC = oDE.Children; 

    //Add row to schema 
    DirectoryEntry oVirDir = oDC.Add(this._strVDirName, 
       oDE.SchemaClassName.ToString()); 

    //Commit changes for Schema class File 
    oVirDir.CommitChanges(); 


    //Set virtual directory to physical path 
    oVirDir.Properties["Path"].Value = this._strPhysicalPath; 

    //Set read access 
    oVirDir.Properties["AccessRead"][0] = true; 

    //Set the default docs 
    oVirDir.Properties["EnableDefaultDoc"][0] = true; 
    oVirDir.Properties["DefaultDoc"][0] = "default.aspx"; 

    //set the name 
    oVirDir.Properties["AppFriendlyName"][0] = this._strVDirName; 

    //do it 
    oVirDir.Invoke("AppCreate", true); 


    //set the application pool 
    if (!string.IsNullOrEmpty(_strApplicationPool)) 
    { 
     object[] param = { 0, _strApplicationPool, true }; 
     oVirDir.Invoke("AppCreate3", param); 
     oVirDir.Properties["AppIsolated"][0] = "2"; 
    } 

    //Save all the changes 
    oVirDir.CommitChanges(); 
} 
+0

感謝您的代碼示例。我當然(希望)會有一些更自動化的東西,但這肯定會完成這項工作。 – 2010-11-23 16:49:10

1

我沒有做任何針對WebDeploy的自定義編程,但我已經看到引用,它有一個API。我似乎無法找到它的官方文檔,但也許這個博客+示例應用程序可以提供一個開始:Web Deploy API Web Application

相關問題