2011-10-28 87 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

相關問題