错误BC30002 - 未定义类型XXX

时间:2008-09-17 16:33:58

标签: asp.net vb.net compiler-errors

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

这个问题,直到今天才开始发生(即使已经编写了大部分代码),但有一段时间,我有这样的错误信息:

  

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

每次修改App_Code文件夹中的文件时都会发生错误。编辑:好的,如果我暂时不触摸任何内容然后刷新页面也会发生这种情况。我还在试图弄清楚如何触发这个错误。

我只需等待一点点而不接触任何东西,然后刷新页面就可以了,但这很烦人。

所以我搜索了一下,但没有任何东西出现,除了输入缺失。有什么想法吗?

6 个答案:

答案 0 :(得分:5)

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

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

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

@ Reference - MSDN

答案 1 :(得分: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

现在它有效......

答案 2 :(得分:4)

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

答案 3 :(得分:1)

检查编译器警告(Visual Studio 的输出窗口)“警告:以下程序集依赖于高于目标的 .NET Framework 版本,并且在运行时可能无法正确加载,从而导致失败”。当您的 dll 之一使用较新版本的 dotnet 编译时,就会发生这种情况。如果您当前的项目设置为使用较低版本的 dotnet,则依赖链会阻止加载 dll(具有较高的 dotnet 版本)。它在 Visual Studio 中出现编译错误,但仍然可以在 IIS 中运行。

答案 4 :(得分:0)

每次网站旋转时都会发生这种情况(每次触摸app_code时,应用都会被回收,并且可能已经将IIS配置为在X分钟无活动后关闭网站)。

我敢打赌,这与asp.net工作进程没有在服务器上拥有正确的访问权限有关。所以它试图加载程序集并被拒绝。

Check this link和表19.3列出了工作进程帐户必须具有访问权限才能运行的所有文件夹。并且不要忘记赋予它对虚拟目录中所有文件和文件夹的权限!

答案 5 :(得分:0)

如果引用相等,请先从备份中替换vbproj和vbproj.user文件