排除 ASP.NET 編譯錯誤

2024/1/19 |

症狀

使用 Lucent Sky AVM 掃描 ASP.NET 網頁應用程式或網站時,掃描失敗且出現以下其中一個錯誤:

MSBuild was skipped. ASP.NET compilation failed. (-42110061)

MSBuild failed. ASP.NET compilation failed. (-42110063)

MSBuild did not produce expected output. ASP.NET compilation failed. (-42110064)

此外,掃描也可能完成但出現以下的警告:

ASP.NET compilation failed. Output from MSBuild will be used instead. (41110042)

原因

掃描 ASP.NET 網頁應用程式或網站時,ASP.NET Compilation Tools 會用來將動態網頁和控制項編譯成組件。若 ASP.NET 編譯過程中出現錯誤,則掃描就會失敗或僅部分完成。

解決方式

依照以下的方法解決這個問題,自第一個方法開始。若無法解決,請嘗試下一個方法。

方法 1

解決 ASP.NET 編譯記錄檔中的錯誤,再重新掃描應用程式。

  • ASP.NET 編譯記錄檔包含以下錯誤訊息:

      error ASPCONFIG: Could not load file or assembly '...' or one of its dependencies. An attempt was made to load a program with an incorrect format.
    

    此網頁應用程式或網站使用僅限 x86 的組件。Lucent Sky AVM 預設使用 64-位元的 ASP.NET Compilation Tools,因此無法載入僅限 x86 的組件。要讓 Lucent Sky AVM 使用 32-位元的 ASP.NET Compilation Tools,在掃描參數中加入 Bitness,32

  • ASP.NET 編譯記錄檔包含以下錯誤訊息:

      error ASPCONFIG: 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.
    

    這個錯誤經常發生在 Lucent Sky AVM 無法正確地偵測網頁應用程式或網站的根目錄時。若是網頁應用程式,將其專案檔案在程式碼壓縮檔案中的相對路徑指定為分析目標;若是網站,將其根目錄置於程式碼壓縮檔案的根目錄。

  • ASP.NET 編譯記錄檔包含以下錯誤訊息:

      error ASPPARSE: Could not load type '...'
    

    找不到網頁應用程式或網站使用的一個參考。確認所有參考的組件都位於 ASP.NET 網頁應用程式或網站的 bin 目錄中。

  • ASP.NET 編譯記錄檔包含以下錯誤訊息:

      error ASPRUNTIME: The current identity (NT AUTHORITY\NETWORK SERVICE) does not have write access to 'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files'.
    

    Process isolation 啟用,但 NetworkService 帳戶沒有權限存取 ASP.NET 2.0 所使用的目錄。要授予其存取權限,在執行 CLEAR Engine 的系統上以管理者身分執行以下命令:

      C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -ga "NT AUTHORITY\NETWORK SERVICE"
    

要深入了解如何在掃描 ASP.NET 網頁應用程式或網站前先排除編譯錯誤,請參考更多資訊段落。

方法 2

使用直接二進位分析來掃描 ASP.NET 網頁應用程式或網站,可以不需要在 Lucent Sky AVM 中組建它們。要深入了解如何使用直接二進位分析,請參考 Lucent Sky 知識庫:
使用直接二進位分析掃描應用程式

方法 3

要關閉 ASP.NET 網頁應用程式或網站的二進位分析而僅使用程式碼分析,在掃描參數中加入 AnalysisEngines,20

更多資訊

在掃描 ASP.NET 網頁應用程式或網站前,使用 ASP.NET Compilation Tool 來確認其沒有 ASP.NET 編譯錯誤。

  1. 使用 PowerShell,瀏覽至 %WINDIR%\Microsoft.NET\Framework\v2.0.50727(若為使用 .NET Framework 2.0 - 3.5 的 ASP.NET 網頁應用程式或網站)或 %WINDIR%\Microsoft.NET\Framework\v4.0.30319(若為使用 .NET Framework 4.0 以上的 ASP.NET 網頁應用程式或網站)。
  2. 輸入以下命令:

     # Replace <WebAppPath> with path to the web application
     $webAppPath = "<WebAppPath>"
     # Replace <PublishPath> with path to a temporary directory
     $publishPath = "<PublishPath>"
     .\aspnet_compiler.exe -v / -p 'C:\website-root' 'C:\website-temp-root' -f
    
  3. 解決發佈的過程中出現的錯誤。
  4. 重複以上的步驟直到沒有錯誤發生。發佈順利完成時,之前步驟指定的暫存目錄中會包含發佈後的網站。若發佈失敗,暫存目錄應該是空的。
  5. 若使用一般掃描方式,則將 <WebAppPath> 的內容作為程式碼壓縮檔案;若使用直接二進位分析,則將 <PublishPath> 的內容做為程式碼壓縮檔案。

要深入了解如何預先編譯 ASP.NET 網頁應用程式或網站,請參考 Microsoft Learn 網站:
先行編譯您的網站 (C#)預先編譯您的網站 (VB)