當我們使用 VS2010 開啟一個 Web Site 專案時, 如果把它使用 Publish 功能部署到一個 IIS Server 上面時, 那麼, 即使你在專案中明明已經指定套用 .Net Framework 4.0, 這個部署的動作並不會自動幫你套用到 IIS 設定...
其實這個問題我已經遇過至少三次了, 但是由於並不是天天遇到, 所以每次解掉, 下次又忘了, 結果又要重新尋找解法, 不勝其擾。我想我還是把它記錄一下好了, 免得下次再遇到又要再找一次。
先來說一下問題發生的原因。當我們使用 VS2010 開啟一個 Web Site 專案時, 如果把它使用 Publish 功能部署到一個 IIS Server 上面時, 那麼, 即使你在專案中明明已經指定套用 .Net Framework 4.0, 這個部署的動作並不會自動幫你套用到 IIS 設定中, 至少在我所使用的 IIS 7.0 裡面是不會的。例如, 我在我的 Web Site 專案中企圖部署到 http://localhost/mysite 中, 雖然過程一切 OK, 但是當我真正去開啟 http://localhost/mysite 時, 畫面中卻出現無法辨識 web.config 中 targetFramework="4.0" 屬性的錯誤訊息。
回到 IIS 管理畫面 (哎... 我想我永遠也不會習慣 IIS 新的管理畫面), 果然一檢查之下, 它的確是依照預設值設定為 .Net Framework 2.0 了。你唯一要做的, 就是把它調整到 4.0, 然後一切都解決了!
我這裡要點出來的重點其實並不在 target 到錯誤的 framework 版本這件事, 反而是 IIS 的錯誤訊息可能不能讓我們一眼就發現問題所在; 其次, 就是 IIS 7.0 在調整 targeting framework 版本的地方。關於前者, 我想你看完這一篇, 如果以後再遇到相同的問題, 就知道如何處理了; 關於後者, 你則要在 IIS 管理畫面中, 先找到那個應用程式或虛擬子目錄所在, 然後在上面按下右鍵, 選擇「管理網站」、「進階設定」
再把「應用程式集區」從 DefaltAppPool 改成 ASP.NET v4.0 即可。
照理說, 如果 .Net Framework 4.0 和 IIS 都正確安裝的話, DefaultAppPool 本來就會指向 .Net Framework 4.0 而不是 2.0; 然而或許是因為 Beta 版的關係 (也可能是因為我的安裝順序跟人家不一樣), 才會造成這個並非每次都會發生的問題。
這個問題還有另一個解法, 那就是重新執行一次 .Net Framework 4.0 (位於 C:\WINDOWS\Microsoft.NET\Framework\v4.0.11208 或 C:\WINDOWS\Microsoft.NET\Framework64\v4.0.11208) 的 "aspnet_regiis -i ", 這應該也可以解決問題。