閱讀英文

共用方式為


在 Visual Studio 中建置 ASP.NET 專案會導致編譯程式錯誤訊息 CS0433

原始產品版本: Visual C++
原始 KB 編號: 2028526

摘要

使用 Microsoft Visual Studio 建置 ASP.NET 專案時,您可能會隨機看到如下的錯誤訊息:

編譯程式錯誤訊息:CS0433:類型 'ASP.summary_common_controls_notes_ascx' 同時存在於 'c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msftx123.dll' 和 'c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msfty456.dll'

描述:在編譯服務此要求所需的資源期間發生錯誤。 請檢閱下列特定錯誤詳細數據,並適當地修改原始程式碼。

來源錯誤:第 100 行: </div>

行 101: <h3 class=“entry”>New Notes</h3>

行 102: <bni:details id=“details” runat=“server” />

行 103: <span class=“RedZone”>1450</span>

第 104 行: <p>摘要。</p>

來源檔案:d:\HTTP\post\publisher\default.aspx 行:102

下列各節將討論此錯誤可能發生的常見案例。

案例 1:相同 bin 資料夾中的兩個元件

描述: 此錯誤的常見原因是相同 Web 應用程式 bin 資料夾中有兩個元件包含兩個類別定義,但具有相同類別名稱。 如果編譯成單一元件Default.aspx多個Default.aspx,就會發生這種情況。 通常,當主版頁面 (Default.master) 和預設 ASPX 頁面 (Default.aspx) 都宣告 _Default 類別時,就會發生這種情況。

解決方案: 變更主版頁面的類別名稱(在大部分情況下為_Default),然後重建專案。 請務必解決類別之間的任何命名衝突。

案例 2:相同元件的多個參考

描述: Visual Studio 中的參考路徑可用來指定專案所使用元件參考的資料夾路徑。 路徑可能包含元件,而且元件包含相同的類別名稱。 它可能會有多個參考新增至相同的元件(版本或名稱可能不同),導致命名衝突。

解決方案: 移除舊版參考。 在 Visual Studio 中,以滑鼠右鍵按兩下您的網站,然後檢查 屬性中的 [參考 ]。

案例 3:默認許可權的變更

描述: 根據預設,編譯 ASP.NET Web 應用程式時,編譯的程式代碼會放在 [暫存 ASP.NET 檔案] 資料夾中。 根據預設,會將訪問許可權授與 ASP.NET 本機用戶帳戶。 帳戶具有存取已編譯程序代碼所需的高信任許可權。 默認許可權可能會有一些變更,而且變更可能會導致版本設定衝突。 另一個可能性是防病毒軟體可能會意外鎖定元件。

解決方案: 清除所有內容的暫存 ASP.NET 檔案資料夾。

案例 4:批次編譯

描述: 當 web.config 檔案中的 batch 屬性設定為 True 時,它會消除第一次存取檔案時所需的編譯所造成的延遲。 ASP.NET 以批次模式預先編譯所有未編譯的檔案。 此批次模式會在檔案第一次編譯時造成延遲。

將 batch 屬性設定為 False 可能會公開應用程式中存在但未回報的任何遮罩編譯錯誤。 更重要的是,它會告訴 ASP.NET 將個別.aspx/.ascx 檔案動態編譯成個別元件,而不是將個別元件編譯成單一元件。

解決方案: 在 web.config 的 <編譯> 區段中設定 batch=False。此動作應該視為暫時性解決方案。 編譯區段中的 Batch=False 對 Visual Studio 中應用程式的建置時間有顯著的效能影響。

案例 5:編輯 web.config 會重新啟動 AppDomain

描述: 修改 ASP.NET 應用程式的web.config 檔案,或變更 bin 資料夾中的檔案(例如新增、刪除或重新命名),會導致AppDomain重新啟動。 當這些動作發生時,所有會話狀態都會遺失,而快取的專案會在網站重新啟動時從快取中移除。 問題可能是因為 Web 應用程式中的狀態不一致所造成。

解決方案: 藉由觸控 Web.config 檔案來觸發 AppDomain 重新啟動。

案例 6:已變更尚未動態重新編譯的原始程式碼

描述: 您可以將原始程式碼儲存在 App_Code 資料夾中,而且程式代碼將在運行時間自動編譯。 產生的元件可供 Web 應用程式中的任何其他程式代碼存取。 因此,App_Code資料夾的運作方式與 Bin 資料夾非常類似,不同之處在於您可以將原始程式碼儲存在其中,而不是編譯的程式代碼。 當原始程式檔中有變更時,類別將會重新編譯。 如果因元件過期而發生衝突,強制重新編譯可能會解決問題。

解決方案: 觸控 Bin 或App_Code資料夾中的檔案,以觸發完整重新編譯。