Microsoft.Web.Administration 并以迭代方式删除 IIS 应用程序
Microsoft.Web.Administration and Removing IIS Apps Iteratively
我使用 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 来删除站点内的所有应用程序。我不想删除站点应用程序本身(路径 =“/”)。
代码如下:
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();