The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何讓同一個 IIS 站台設定兩個不同的 ASP.NET 應用程式

我們最近開發了一個 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 的時候無意間發現了,最近終於給我用上了。

相關連結