TIPS-切斷web.config的繼承關係

在ASP.NET的設計中,web.config是存在繼承關係的。例如: 我在wwwroot下放的web.config設定,將會影響到子目錄(例如: wwwroot/MySubWebApp)甚至虛擬子目錄下運作的ASPX網頁,即使MySubWebApp已建立成獨立的Web Application時,還是會受到一些影響。 (之前在Sharepoint網站上加掛自己Web AP時,有不少類似經驗)

我在Community Server 2007的網站下,建了一個虛擬目錄MySubWebApp(實體路徑為D:\WWW\MySubWebApp),放入另一個獨立網站的內容,並用IIS設定成獨立的Web Application,瀏覽時會傳回以下錯誤:

Server Error in '/MySubWebApp' Application.

Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: Could not load file or assembly 'CommunityServer.Components' or one of its dependencies. The system cannot find the file specified. (d:\www\cs2007\web.config line 40)

查了一下,問題出在d:\www\cs2007\web.config 的這一行:

<httpModules>
  <add name="CommunityServer" type="CommunityServer.CSHttpModule, CommunityServer.Components" />
</httpModules>

CS2007在它的web.config裡宣告了專用的HttpHandler,而這個設定變成在MySubWebApp裡也生效,於是ASP.NET會試圖在D:\WWW\MySubWebApp\bin裡尋找CommunityServer.Components.dll。根本是八竿子打不著的東西,當然找不到而以錯誤收場。

要解決這個問題,我們可以切斷這層繼承關係。在web.config裡可宣告location inheritInChildApplications來阻止繼承。

不過,這是個神祕的Attribute,在Visual Studio中不會提示,MSDN上也找不到這項Attrubute。在CS2007的web.config上,用<location path="." inheritInChildApplications="false">把<system.web>包起來,問題就解決囉!

歡迎推文分享:
Published 10 July 2008 08:20 AM 由 Jeffrey
Filed under: ,
Views: 21,022



意見

# marty1101 said on 29 September, 2008 10:32 PM

奇怪了, 照這麼設也還是不行耶!

Virtual Directory還是要設的對吧?

# Eliza said on 16 June, 2009 08:13 PM

預設的網站: framework 2.0

子網站: framework 1.1

子網站會因為認不得預設網站中的"inheritInChildApplications"而發生錯誤,請問依您的經驗有沒有a good solution?

# Jeffrey said on 17 June, 2009 12:43 AM

to Eliza, 兩個WebApp若CLR版本不同,我會設成各自使用自己的AppPool(weblogs.asp.net/.../Running-multiple-versions-of-the-Framework-in-ASP.NET.aspx) 我想這樣應該不會有web.config互擾的問題(純猜測...)

# maxchiu said on 05 October, 2009 11:40 AM

這有一篇相關的文章可參考,並附有MSDN相關的參考網址。

www.xdevsoftware.com/.../Block-Inheritance-of-Root-webconfig-for-Child-Applications.aspx

# DeltaCat said on 12 July, 2010 02:06 AM

对于 .NET 3.5 以及 .NET 4 这个 inheritInChildApplications 已经彻底没有了。

如果 web.config中出现,会报 “找不到属性” 的错误

# Jeffrey said on 12 July, 2010 04:25 AM

to DeltaCat, 我查到一篇MS Support在論壇的回覆,雖然在Visual Studio不支援,但可以直接在部署時加上。參考: forums.asp.net/.../1215988.aspx

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<July 2008>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication