2008-09-17 60 views
5

好吧,這開始讓我發瘋。我有一個asp.net webapp。非常簡單,大多數.aspx.vb中的代碼以及App_Code中的一些類。錯誤BC30002 - XXX型未定義

的問題,這已經開始發生僅今日(即使大部分的代碼已經寫的),是曾經在一段時間,我有這樣的錯誤消息:

錯誤BC30002:類型「 XXX'未定義

每次修改App_Code文件夾中的文件時都會發生錯誤。編輯:好的,這種情況也發生,如果我什麼都不碰,然後刷新頁面。我仍然試圖找出如何觸發這個錯誤。

我只需等待一下,不用觸摸任何東西,然後刷新頁面,它的工作原理,但它非常討厭。

所以我搜索了一下,但沒有出現,除了進口缺失。任何想法 ?

回答

4

我想我發現了這個問題。

我的代碼是這樣的:

Imports CMS 

Sub Whatever() 
    Dim a as new Arbo.MyObject() ' Arbo is a namespace inside CMS 
    Dim b as new Util.MyOtherObject() ' Util is a namespace inside Util 
End Sub 

我不知道爲什麼我寫的那樣,但事實證明,我打電話類的事實沒有任何調用他們的整個命名空間或進口其整個命名空間觸發了錯誤。

我重寫這樣的:

Imports CMS.Arbo 
Imports CMS.Util 

Sub Whatever() 
    Dim a as new MyObject() 
    Dim b as new MyOtherObject() 
End Sub 

而現在它的工作原理...

4

聽起來像預編譯問題,特別是因爲你提到你得到的錯誤,然後等待,它消失。 ASP.NET可能仍處於動態編譯應用程序的過程中,或者它已將類型編譯爲不同的程序集。

通過動態編譯,不保證將不同的代碼隱藏文件編譯到相同的程序集中。因此,您所引用的類型可能無法在其預編譯的程序集中解析。

嘗試使用「@Reference」指令向運行時指示您的頁面和包含您的類型的文件應該被編譯到相同的程序集中。

@ Reference - MSDN

0

聽起來好像它發生在每次網站旋轉起來(應用程序得到回收每一個你接觸的app_code,也許你已經配置IIS關閉閒置的X分鐘後的網站時)時間。

我敢打賭,它與asp.net工作進程沒有正確的訪問權限在服務器上。所以它試圖加載程序集並被拒絕。

Check this link及所有文件夾的工作進程帳戶必須具有訪問,以功能列表表19.3。並且不要忘記授予您虛擬目錄中所有文件和文件夾的權利!

0

這發生在我身上後,我增加了一個新的項目,以舊的溶液。我降低了目標框架以匹配其他「較老」的項目,並且錯誤消失了。