在應用程式級別以外使用註冊為 allowDefinition='MachineToApplication' 的節是錯誤的解決辦法
在ASP.NET程式中,我們是可以在各個目錄放置不同的web.config檔案的,但有時在非根目錄先放置的web.config檔案會導致這樣的錯誤提示:
"在應用程式級別之外使用註冊為 allowDefinition='MachineToApplication' 的節是錯誤的。如果在 IIS 中沒有將虛擬目錄配置為應用程式,則可能導致此錯誤。"
"It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS. "
網上有不少相關的帖子,主要的解決方法如下:
解決方法1(不推薦):
在IIS將該目錄做成應用程式:開啟IIS —> 預設Web站點 —> 找到該目錄右鍵開啟屬性頁 —> 目錄(或虛擬目錄)卡 —> 在下半部分“應用程式設定”處點第一項的“建立”,把該目錄做成應用程式。
解決方法2(不推薦):
若IIS中沒有應用程式名,先建立,若還不行把C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config中的所有allowDefinition="MachineToApplication"改為allowDefinition="Everywhere"
解決方法3:
在Web.config檔案中刪除<authentication mode="Windows" />結點就可以了。
要注意的一點是,我們首先要理解這個錯誤,再檢視去消除這個錯,其實大部分時候是不應該用第一種和第二種解決方法去消除出錯提示的,這個出錯提示的出現是因為web.config中的某些節點在一個IIS應用程式中是隻能設定一次的,比如<authentication>節,所以大部分時候這個錯誤是由於多個子目錄下存在多個web.config導致的,比較謹慎的解決方法應該是仔細查看出問題目錄下的web.config,剔除掉不能重複設定的節點。
附:對於DNN使用者,任何子目錄下被誤插入了web.config檔案都會導致這個錯誤,刪除誤插入了web.config檔案即可解決問題。