﻿# 如何讓同一個 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 影響了「虛擬目錄」下的「子網站」的運作，而導致有些控制項被重複載入，或是因為根目錄的網站要載入某些控制項而到了「子網站」時找不到檔案的問題。

我研究了一下找到了[解決方案](http://blogs.msdn.com/joestagner/archive/2008/04/02/making-nested-asp-net-applications-work.aspx)，其實只要加兩行到根目錄網站的 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 的時候無意間發現了，最近終於給我用上了。

**相關連結**

-   [SectionInformation.InheritInChildApplications Property](http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.inheritinchildapplications.aspx)
-   [SOLVED: IIS7, validateIntegratedModeConfiguration and inheritInChildApplications clash](http://runtingsproper.blogspot.com/2010/04/solved-iis7-validateintegratedmodeconfi.html)
-   [TIPS-切斷web.config的繼承關係](http://blog.darkthread.net/post-2008-07-10-stop-web-config-inheritance.aspx)
