2015-01-09 29 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();