错误BC30002-未定义XXX类型

时间:2020-03-05 18:59:20  来源:igfitidea点击:

好,这开始让我发疯。我有一个asp.net webapp。非常简单明了,.aspx.vb中的大多数代码以及App_Code中的一些类。

这个问题直到今天才开始出现(即使大多数代码已经编写过),是不时出现以下错误消息:

Error BC30002: Type ‘XXX’ is not defined

每次我修改App_Code文件夹中的文件时,都会发生该错误。编辑:好的,如果我一段时间不触摸任何东西,然后刷新页面,也会发生这种情况。我仍在尝试弄清楚如何触发此错误。

我只需要稍等片刻即可,然后刷新页面即可使用,但这很烦人。

因此,我进行了一些搜索,但是除了缺少进口物品以外,什么都没有出现。任何的想法 ?

解决方案

回答

听起来像是一个预编译问题,尤其是因为我们提到先得到错误然后等待,然后错误消失了。 ASP.NET可能仍处于动态编译应用程序的过程中,或者已将类型编译为不同的程序集。

使用动态编译,不能保证将不同的代码隐藏文件编译到同一程序集中。因此,我们引用的类型可能无法在其预编译的程序集中解析。

尝试使用" @Reference"指令向运行时指示页面和包含类型的文件应编译到同一程序集中。

@参考MSDN

回答

听起来好像每次网站旋转时都会发生(每次触摸app_code时该应用程序都会回收,可能我们已将IIS配置为在X分钟不活动后关闭网站)。

我敢打赌这与asp.net worker进程有关,服务器上没有正确的访问权限。因此,它试图加载程序集而被拒绝。

检查此链接,并在表19.3中列出工作进程帐户必须有权访问才能起作用的所有文件夹的列表。并且不要忘记赋予它虚拟目录中所有文件和文件夹的权限!

回答

我想我找到了问题。

我的代码是这样的:

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

现在它可以工作了...