2015-01-09 30 views
1

我正在使用C#與Microsoft.Web.Administration刪除網站內的所有應用程序。我不想刪除網站應用程序本身(路徑=「/」)。Microsoft.Web.Administration和刪除IIS應用程序迭代

下面的代碼:

ServerManager manager = new ServerManager(); 
for (int i = 0; i < manager.Sites[siteName].Applications.Count; i++) 
{ 
    if (manager.Sites[siteName].Applications[i].Path != "/") 
    { 
     manager.Sites[siteName].Applications.RemoveAt(i); 
    } 
} 
manager.CommitChanges(); 

與此代碼會發生什麼情況是,一些應用程式遭到移除和別人不一樣,並應用程式遭到移除,並且不會是彼此不同的運行。

manager.Sites[sitename].Applications.Clear(); 

將工作,但它也將刪除應用程序與路徑=「/」,我不想。

我試圖做這樣的事情,太:

Application baseApp = null; 
for (int i = 0; i < manager.Sites[siteName].Applications.Count; i++) 
{ 
    if (manager.Sites[siteName].Applications[i].Path == "/") 
    { 
     baseApp = manager.Sites[siteName].Applications[i]; 
    } 
} 

manager.Sites[siteName].Applications.Clear(); 

if (baseApp != null) 
{ 
    manager.Sites[siteName].Applications.Add(baseApp); 
} 

manager.CommitChanges(); 

但是,這也不能工作。路徑=「/」的應用程序從未重新添加,或未正確添加。

是否有任何人對Microsoft.Web.Automation有更多的經驗,他對於一次刪除多個應用程序有一些見解,可以幫助我解決這個問題?

回答

1

事實證明,我在製作經典的愚蠢錯誤時,通過枚舉來改變集合。第一個應用程序將被刪除,計數將下降。有些應用程序從未被查看。刪除的隨機性僅僅是由於收集的無序性。傻我!

這工作:

 List<Application> appsToRemove = new List<Application>(); 
    for (int i = 0; i < manager.Sites[siteName].Applications.Count; i++) 
    { 
     if (manager.Sites[siteName].Applications[i].Path != "/") 
     { 
      Console.WriteLine("Removing {0}", manager.Sites[siteName].Applications[i].Path); 
      appsToRemove.Add(manager.Sites[siteName].Applications[i]); 
     } 
    } 
    foreach (Application a in appsToRemove) 
    { 
     manager.Sites[siteName].Applications.Remove(a); 
    } 
    manager.CommitChanges();