更改应用程序池的属性

本文关键字:属性 程序池 应用程序 应用 | 更新日期: 2023-09-27 18:12:56

有没有办法让这段代码更漂亮?

ServerManager serverManager = new ServerManager();
            ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
            foreach (var site in serverManager.Sites)
            {
                //Trace.WriteLine("Site: {0}", site.Name);)
                foreach (var app in site.Applications)
                {
                    if (app.Path.EndsWith("Report") || app.Path.EndsWith("Data"))
                    {
                        Trace.WriteLine("ReportApi     "  + app.ApplicationPoolName);
                        applicationPoolCollection[app.ApplicationPoolName].Enable32BitAppOnWin64 = true;
                        applicationPoolCollection[app.ApplicationPoolName].ManagedRuntimeVersion = "v4.0";

                    }
                }
            }
            serverManager.CommitChanges();

第二个问题,如果我在只有iis6的PC上运行它会发生什么

更改应用程序池的属性

看起来很整洁。如果你想让事情变得平坦一点,你可以使用Cast扩展方法(它对IEnumerable类型进行操作,将它们转换为IEnumerable<T>)来使事情更LINQy。它让事情对一些人更清晰,对另一些人更不透明。随你挑。

var reportOrDataApps = serverManager
    .Sites
    .Cast<Site>()
    .SelectMany(s => s.Applications.Cast<Application>())
    .Where(app => app.Path.EndsWith("Report") || app.Path.EndsWith("Data"))
foreach(var app in reportOrDataApps)
{
    Trace.WriteLine("ReportApi     "  + app.ApplicationPoolName);
    applicationPoolCollection[app.ApplicationPoolName].Enable32BitAppOnWin64 = true;
    applicationPoolCollection[app.ApplicationPoolName].ManagedRuntimeVersion = "v4.0";
}
编辑:

看起来集合已经实现了IEnumerable<T>,所以你可以缩短LINQ:

var reportOrDataApps = serverManager
    .Sites
    .SelectMany(s => s.Applications)
    .Where(app => app.Path.EndsWith("Report") || app.Path.EndsWith("Data"))