2009-01-05 52 views
5

我已經爲ASP.NET 3.5 Web應用程序(而非網站)使用Visual Studio 2008的模板創建了一個Web部署項目。預編譯的ASP.NET Web應用程序:錯誤「System.Web.HttpException文件filename.aspx未預編譯,無法請求。」

我編譯了創建部署所需文件的項目。我將生成的文件夾(bin,靜態文件和所有帶有aspx佔位符的文件夾等)複製到我想測試應用程序的登臺服務器。

如果我標誌選項「允許此預編譯站點可更新」,我得到的每一頁我在瀏覽器上加載此錯誤消息:

 
System.Web.HttpException file PAGENAME.aspx has not been pre-compiled, 
and cannot be requested. 

最後一行在堆棧跟蹤:

 
System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(
    VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, 
    Boolean allowBuildInPrecompile) +8756366 

如果我選中該選項,一切都很好(我猜是因爲實際的ASPX/ASCX仍然存在在原來的形式)。

任何想法我在這裏失蹤?有忘記複製的設置或特殊文件嗎?

謝謝!

注:

  • 我有第三方組件
  • 我檢查了臨時服務器上的bin文件夾中的幾個引用。它包含包含所有類的預編譯程序集(我使用Reflector來分析程序集)。

回答

7

所有ASPX文件應當只包含

這是 預編譯工具生成的標記文件,並應 不能刪除!

刪除bin文件夾中的所有內容並重新發布Web。 確保您從發佈目錄中獲取文件。

請務必複製bin文件夾中包含的.compiled文件。

+0

謝謝您的回答!它沒有包含確切的解決方案,但它導致我重新檢查bin文件夾。我忘了將自動複製過程中的「.compiled」文件插入服務器。我會編輯你的答案,我會接受它。 – splattne 2009-01-05 14:47:46

1

爲了記錄在案,我忘了複製這些「.compiled」文件(MSDN documentation: File Handling During ASP.NET Precompilation):

對於可執行文件在ASP.NET Web應用程序 ,編譯器組件 和文件與.compiled文件名 擴展名。程序集名稱是由編譯器生成的 。 .compiled文件不包含 可執行代碼。相反,它只包含 僅供ASP.NET 需要查找相應的 程序集的信息。

預編譯後的應用程序部署了 後,ASP。NET使用Bin文件夾中的程序集 來處理請求。 預編譯輸出包括 .aspx或.asmx文件作爲頁面的佔位符 。佔位符文件 不包含代碼。它們只存在於 提供調用ASP.NET的 特定頁面請求的方式,因此可以將文件 權限設置爲限制 訪問頁面。