我們最近開發了一個 ASP.NET 2.0 的網站,在開發的時候沒問題,上測試機的時候沒問題,上正式機的時候卻頻頻出狀況,大致的執行環境如下:
- 開發機(用 ASP.NET Development Server 執行)
http://localhost:2938/
- 測試機(用 IIS 6 執行)
http://mysite.test.com/
- 正式機(用 IIS 6 執行)
http://www.myofficalsite.com/app1/
看出差異了吧!因為我們開發的 ASP.NET 網站被安裝在「虛擬目錄」下,而該網站(http://www.myofficalsite.com/)本身就是一個 ASP.NET 2.0 的網站,所以「根目錄的網站(Root Website)」的 Web.config 影響了「虛擬目錄」下的「子網站」的運作,而導致有些控制項被重複載入,或是因為根目錄的網站要載入某些控制項而到了「子網站」時找不到檔案的問題。
我研究了一下找到了解決方案,其實只要加兩行到根目錄網站的 Web.config 即可取消子網站繼承根目錄網站設定,如下:
<location path="." inheritInChildApplications="false">
<system.web>
</system.web>
</location>
也就是先開啟根目錄網站的 Web.config 檔案,找到現有的 <system.web> 區段(Section),將整段的最前面加上一行 <location path="." inheritInChildApplications="false"> 標籤,在整段的最後面新增一行 </location> 標籤就可以了,這等於是宣告 ASP.NET 不要將根目錄網站的設定繼承(Inherit)到子網站應用程式(Child Applications)。
這是個很實用的技巧,不過這真的很難找,感覺很少人會討論到這個問題,而我也是之前在看國外 Blog 的時候無意間發現了,最近終於給我用上了。
相關連結