1

我正在使用预编译的 ASP.NET 2.0 站点(即,使用 Visual Studio 2005 中的“构建->发布网站”功能复制到服务器)。我捕获并记录了所有通常非常详细的错误,但最近我收到以下错误,没有其他信息:

无法加载程序集“App-Web-rp2eml-j”。确保在访问页面之前已对其进行编译。

现在,“App-Web-rp2eml-j”文件应该是我的 bin 文件夹中的一个 dll,它是为预编译站点创建的。我的主要问题是,我如何知道哪个 aspx 页面正在寻找那个 dll?我已经尝试重新发布该网站,甚至完全清除该网站并重新发布,但问题并没有消失。

在谷歌搜索问题时,关于此错误消息的大多数答案都围绕确保 IIS 设置为使用 ASP.NET 2.0 而不是 1.1。这不是我的问题。

注意 1:该站点似乎都可以正常工作,但显然(至少)有一页已损坏,我无法找到。

注意 2:上面的文件名应该有下划线而不是破折号,但是 SO 的标记正在将下划线之间的文本更改为斜体。

4

2 回答 2

2

提到的 dll 是否存在于您的 bin 目录中?你把那部分斜体,所以我怀疑它没有。这可能意味着错误是指临时文件夹中的 dll。

如果 ASP.NET 临时文件文件夹中的一个或多个 dll 已损坏,则可能会出现此问题。有时,如果驻留在虚拟目录中的 dll 没有更改,则 ASP.NET 不会在此处刷新文件。它每隔一段时间就会在我的服务器上发生。

我的解决方案如下:

  1. 停止服务器上的 IIS 服务一分钟左右。

  2. 导航到 ASP.NET 临时文件文件夹(通常位于“%windir%\Microsoft.NET\Framework\\Temporary ASP.NET Files\MyApplicationName”)并清除该文件夹中的所有文件。

  3. 将我的站点发布并上传到配置的虚拟目录。

  4. 重新启动 IIS 和其他服务。

这个简单的 4 步过程过去对我来说效果很好,可能值得你一试。

但是,要回答您的基本问题,有两种方法可以“逆向工程” dll:

  1. 在 ILDASM 中加载它并检查包含的类。
  2. 使用 Reflector 将 dll 中包含的所有类文件保存到一个文件夹中。

但是,我怀疑这是否会解决您的问题,因为每个 dll 可能包含许多类文件,并且您不知道“哪个 ASPX 页面正在寻找该 dll”。

于 2009-03-12T14:57:37.737 回答
0

也许您可以通过 Global.asax 事件 Application_OnError 捕获有关错误的更多详细信息,以便您可以查看堆栈跟踪。

于 2009-03-12T14:45:17.080 回答