好吧,这开始让我发疯。我有一个 ASP.NET Web 应用程序。非常简单,大部分代码在 .aspx.vb 中,一些类在 App_Code 中。

这个问题直到今天才开始出现(尽管大部分代码已经编写完成),偶尔我会收到以下错误消息:

错误 BC30002:类型“XXX”未定义

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

我只需要稍等一下,不要碰任何东西,然后刷新页面,它就可以工作,但这很烦人。

所以我搜索了一下,但除了缺少导入之外什么也没找到。任何想法 ?

有帮助吗?

解决方案 2

我想我发现了问题。

我的代码是这样的:

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

现在它起作用了......

其他提示

听起来像是预编译问题,特别是因为您提到您收到错误,然后等待它就消失了。ASP.NET 可能仍在动态编译应用程序的过程中,或者已将类型编译到不同的程序集中。

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

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

@参考-MSDN

在我向旧解决方案添加新项目后,发生了这种情况。我降低了目标框架以匹配其他“较旧”项目的框架,并且错误消失了。

听起来好像每次网站启动时都会发生这种情况(每次触摸 app_code 时应用程序都会被回收,并且可能您已将 IIS 配置为在 X 分钟不活动后关闭网站)。

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

检查此链接 表 19.3 列出了工作进程帐户必须有权访问才能正常运行的所有文件夹。并且不要忘记授予它对虚拟目录中所有文件和文件夹的权限!

如果引用相同,请替换之前备份中的 vbproj 和 vbproj.user 文件

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top