在VS2010/IIS 7.5上開發站點時,我使用Web Deploy將站點從我的機器發佈到開發站點服務器。IIS web部署 - 創建虛擬目錄?
該網站有大約40個虛擬目錄,我想在部署期間自動創建服務器上的這些目錄。有沒有簡單的方法來做到這一點?
我正在考慮編寫一個小應用程序,它可以從文件或數據庫加載列表並按需創建它們。這些目錄在我的開發機器上有不同的物理路徑,而不是在Web服務器上,這也會引發一些問題。
在VS2010/IIS 7.5上開發站點時,我使用Web Deploy將站點從我的機器發佈到開發站點服務器。IIS web部署 - 創建虛擬目錄?
該網站有大約40個虛擬目錄,我想在部署期間自動創建服務器上的這些目錄。有沒有簡單的方法來做到這一點?
我正在考慮編寫一個小應用程序,它可以從文件或數據庫加載列表並按需創建它們。這些目錄在我的開發機器上有不同的物理路徑,而不是在Web服務器上,這也會引發一些問題。
如果你使用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();
}
感謝您的代碼示例。我當然(希望)會有一些更自動化的東西,但這肯定會完成這項工作。 – 2010-11-23 16:49:10
我沒有做任何針對WebDeploy的自定義編程,但我已經看到引用,它有一個API。我似乎無法找到它的官方文檔,但也許這個博客+示例應用程序可以提供一個開始:Web Deploy API Web Application
40個虛擬目錄?所以你有40個不同的應用程序。嗯,這似乎很多。你在開發什麼樣的網站?我知道小型託管服務提供商在服務器上的虛擬目錄少於您:-) – 2010-11-19 20:40:09
不,它不是40種不同的應用程序。我正逐漸將大量(400k +行代碼和超過100,000頁)經典ASP應用程序遷移到.NET MVC。 virt文件夾讓新網站訪問現有網址上的舊內容。 – 2010-11-19 20:44:58