2008-09-17 59 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

这发生在我身上后,我增加了一个新的项目,以旧的溶液。我降低了目标框架以匹配其他“较老”的项目,并且错误消失了。