首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

解決 IIS 中「allowDefinition='MachineToApplication'」配置錯誤

     編輯:程式設計綜合問答

錯誤現象

在本地開發環境中運行正常的 ASP.NET 應用程式,部署到阿里雲伺服器後出現以下錯誤:

在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的節是錯誤的。如果在 IIS 中沒有將虛擬目錄配置為應用程式,則可能導致此錯誤。

錯誤截圖

根本原因

這個錯誤通常發生在 web.config 中包含了只能在應用程式根目錄下使用的配置節(如 <authentication>、<sessionState> 等),但該目錄在 IIS 中未被設定為「應用程式」。常見情況包括:

  • 將子目錄當作獨立網站部署,但未在 IIS 中轉換為應用程式
  • 虛擬目錄配置錯誤,未啟用應用程式池
  • 專案發布時包含了不應出現在子目錄中的配置節

解決方案

方法一:在 IIS 中將目錄轉換為應用程式(推薦)

  1. 打開 IIS 管理器(inetmgr)
  2. 展開網站節點,找到報錯的虛擬目錄或子目錄
  3. 右鍵點擊該目錄,選擇「轉換為應用程式」
  4. 在彈出的對話框中確認應用程式池選擇正確(通常為 .NET v4.0 或 v4.5)
  5. 點擊「確定」完成轉換

方法二:移除或調整 web.config 中的受限配置節

如果該目錄不應作為獨立應用程式運行,請檢查 web.config 並移除只能在應用程式根目錄使用的配置節。例如:

<!-- 這些節點只能出現在網站根目錄的 web.config 中 -->
<authentication mode="Windows" />
<sessionState mode="InProc" />

將其刪除或移至網站根目錄的 web.config 中。

方法三:檢查發布配置

確保專案發布時未勾選「包含父目錄配置」等選項,避免將根目錄配置誤複製到子應用程式中。

驗證修復

完成上述配置後,重新啟動 IIS 網站(或回收應用程式池),再次訪問應用程式,錯誤應不再出現。若問題持續,請檢查事件查看器中的 ASP.NET 錯誤日誌以獲取更詳細信息。

最佳實踐建議

  • 開發環境與生產環境保持一致的 IIS 應用程式結構
  • 使用 Web.config 轉換(Web.Release.config)管理不同環境的配置差異
  • 定期審查伺服器應用程式池配置,確保 .NET 版本匹配
  1. 上一篇文章:
  2. 下一篇文章:
Struts2 ` s:textarea ` 與原生 ` textarea ` 差異解析 Struts2 `` 與原生 `