症狀
使用 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 編譯錯誤。
- 使用 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 網頁應用程式或網站)。
-
輸入以下命令:
# 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
- 解決發佈的過程中出現的錯誤。
- 重複以上的步驟直到沒有錯誤發生。發佈順利完成時,之前步驟指定的暫存目錄中會包含發佈後的網站。若發佈失敗,暫存目錄應該是空的。
- 若使用一般掃描方式,則將 <WebAppPath> 的內容作為程式碼壓縮檔案;若使用直接二進位分析,則將 <PublishPath> 的內容做為程式碼壓縮檔案。
要深入了解如何預先編譯 ASP.NET 網頁應用程式或網站,請參考 Microsoft Learn 網站:
先行編譯您的網站 (C#) 和 預先編譯您的網站 (VB)