2011-10-28 59 views
0

有什么方法可以使此代码更好?更改应用程序池的属性

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

第二个问题,我是否会在PC上只具有IIS6

感谢您的帮助运行它会发生什么。

+0

这有什么错代码是什么? “很好”不是非常精确的概念 - 代码看起来非常清晰。 –

回答

3

看起来很整齐。如果您想稍微扁平一些,可以使用扩展方法(对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")) 
+0

+1样本...注意一个人应该将代码定位到将要阅读的人 - 如果你/你的团队不擅长LINQ,那么嵌套select可能很容易隐藏实际发生的事情(不像2 foreach)。 –

+2

我发现在LINQ中陈述这样的问题通常会导致更正确的代码(嵌套更少,复杂度更低)。如果你还没有,绝对值得回味。 – spender

相关问题