13

好吧,这开始让我发疯了。我有一个 asp.net webapp。非常简单,大部分代码在 .aspx.vb 中,少数类在 App_Code 中。

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

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

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

我只需要稍等片刻,不碰任何东西,然后刷新页面就可以了,但这很烦人。

所以我搜索了一下,但除了导入丢失之外什么都没有出现。任何的想法 ?

4

6 回答 6

8

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

于 2018-02-07T19:47:55.743 回答
7

我想我找到了问题所在。

我的代码是这样的:

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

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

于 2008-10-01T10:01:10.243 回答
5

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

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

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

@参考 - MSDN

于 2008-09-17T16:57:41.237 回答
2

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

于 2021-03-10T16:31:26.150 回答
0

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

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

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

于 2008-09-17T17:07:46.470 回答
0

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

于 2019-02-14T09:21:10.523 回答