c# - Microsoft.Web.Administration 和迭代删除 IIS 应用程序

标签 c# iis-7

我使用 C# 和 Microsoft.Web.Administration 来删除站点内的所有应用程序。我不想删除网站应用程序本身(路径=“/”)。

代码如下:

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 有更多经验,对一次删除多个应用程序有一些见解,可以帮助我解决这个问题?

最佳答案

事实证明,我犯了一个典型的愚蠢错误,即在枚举集合时更改集合。第一个应用程序将被删除,计数将会减少。有些应用程序从未被关注过。删除的随机性仅仅是由于集合的无序性质。我真傻!

这有效:

     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();

关于c# - Microsoft.Web.Administration 和迭代删除 IIS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867743/

相关文章:

c# - 任务<T>保留启动参数

c# - 如何反序列化 Json 对象 - C#

iis-7 - 通过 IIS 7 调试经典 ASP

c# - C# 中的帧重定向

iis-7 - IIS7 : Differences between static and dynamic content compression

c# - 将 RDLC 数据源设置为对象的问题

c# - 为什么 C# 中的 Random 构造函数在方法末尾分配 Seed 参数?

c# - 使用 C# Lambda 运算符

video - IIS7 mp4 文件和 html 5 视频标签

c# - 如何使用 WMI/ADSI 和 C# 在 IIS 中为身份验证的扩展保护启用/禁用/获取状态?