当前位置:  开发笔记 > 编程语言 > 正文

如何修复ASP.NET错误"文件'nnn.aspx'尚未预编译,无法请求."?

如何解决《如何修复ASP.NET错误"文件'nnn.aspx'尚未预编译,无法请求."?》经验,为你挑选了6个好方法。

我有一个VS 2005网站,我使用"发布网站"发布,我清除了所有三个复选框.我还有一个部署项目,它可以获取已发布的文件并创建一个MSI.然后,我将该软件包安装在单独的测试服务器上.

换句话说,整个网站是预编译的.但是,当我转到名为"Services"的特定子文件夹中的任何.aspx文件时,我得到一个HttpException:

System.Web.HttpException:文件'/myapp/Services/mypage.aspx'尚未预编译,无法请求.

如果我转到其他文件夹中的.aspx文件,无论是根目录还是其他子文件夹,它都能正常工作.

mypage.aspx本身的内容是: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="mypage.aspx.cs" Inherits="Services_mypage" %>"

/myapp/bin文件夹中,我可以看到一个mypage.aspx.989dc2fb.compiled文件.这个内容似乎指向bin文件夹中也存在的某个程序集.

为什么会出现此错误?.compiled文件在那里,程序集在那里,并且该程序集中存在有问题的类型(我可以在对象浏览器中看到它).它是关于.compiled文件的名称或内容的吗?我有某种错误的版本吗?.compiled文件名中看似随机的数字是什么意思,重要的是什么?

我还想提一下,这个问题突然出现了,我不确定自从几天前它正常工作以来可以做些什么改变(但据我所知,没有).



1> Carl..:

我没有那个错误,但经过一点点Google搜索我遇到了这个链接,我不确定你是否已经看过它:http://forums.asp.net/t/956297.aspx

编辑(添加关键文字):

当在web.config中指定引用并且部署文件夹/站点不包含系统中安装的这些dll或bin文件夹中不包含它们时(如果它们是私有程序集),将出现此错误.例如:(add assembly ="Namespace1.NameSpace2,Version = xxxx,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"/)如果你的web.config包含这样的任何程序集,并且部署的服务器在bin或GAC中不包含这些集合,那么这个会发生错误.

人们报告说,目标服务器上缺少的程序集最终成为根本原因,在他们的情况下,但他们有与您相同的错误.奇怪的.

也许那就是问题?


对我来说略有不同,但同样的dll主题.我有一个项目A生成了一个带有一些在项目B中使用的预编译用户控件的DLL.这两个项目都使用了Telerik RadControls,但版本不同.项目B中没有使用A控件的页面工作,这些页面确实给出了关于版本不匹配的相应消息.然后B中的.asmx服务给出了非常无用的预编译消息.同步版本修复了所有问题.

2> 小智..:

我将网站从2.0升级到4.0时出现此错误.该错误是由PrecompiledApp.config站点root目录中的文件引起的.删除该文件后,该网站开始工作.



3> krisg..:

正如所有上述答案的脚注一样,通过重新发布来解决问题以替换丢失的程序集......虽然我之前使用相同的解决方案解决了这个问题,但我刚刚遇到了另一个可能会帮助其他人的原因.

我的网站运行的AppPool将"启用32位应用程序"设置设置为false.通过应用程序池的"高级设置"对话框将此更改为true,我解决了我的问题.

希望能帮助其他一些可怜的傻瓜.



4> Aidin..:

过去几天我一直在努力解决这个问题.至少在我的情况下,错误消息完全是误导性的,与预编译的网站无关.有很多文章或帖子提供了许多不同的答案,只会增加混乱.我个人认为这个错误主要是由于缺少引用或版本控制不正确引起的.为了尽快解决问题,您必须对此进行排除,或以其他方式修复缺失/错误的引用.

为此,您需要使用名为"Assembly Binding Log Viewer"的工具.此工具将告诉您哪些引用丢失或版本错误.如果缺少/不匹配的参考,那么继续修复它; 否则你需要做其他魔术技巧,比如检查应用程序池是32位还是权限.

脚步:

    在您的服务器上创建以下文件夹

    C:\ fuslog C:\ fuslog\logs

    将程序集绑定日志查看器复制到您的服务器C:\ fuslog:

    你可以在这样的位置找到该程序

    C:\ Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\Bin\fuslogvw.exe

    您可能需要查看"Program Files"而不是"Program Files(x86)"或查看不同的版本而不是"v7.0A"

    在服务器上执行fuslogvw.exe

    点击"设置..."

    确保选中"将日志绑定失败到磁盘"

    选中Enable custom log path并在框中输入以下内容:C:\ fuslog\logs

    单击"确定"

    回收/重置您的应用程序池以强制执行新的绑定

    单击"刷新".现在,您可以在此处查看失败的绑定

    找到确切绑定的更好方法是转到c:\ fuslog\logs\Default.在这里,您可以找到确切的绑定失败.有些是无关紧要的,你需要通过反复试验来找到关键的一个.我的是以下失败:

     System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35
    

我通过在我的网站web.config中添加以下条目来修复此问题:


    ...
    
        ...
        
        
            
            
        
        ...
    
    ...

我希望这有助于其他人快速解决问题.


谢谢伙计.对于这个描述良好的解决方案,你值得我投票.我认为上面的所有答案都应该由你的.荣誉.值得一提的是以下文章.http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx

5> Jeroen Corte..:

我遇到了同样的问题。通过删除此文件夹中临时asp.net文件文件夹中的文件,解决了我的问题:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root 



6> 小智..:

这个错误发生在我身上,我解决了它.

如果要发布站点,请检查在Visual Studio中使用固定命名和单页程序集

你会看到这个问题将会解决!


这个配置在哪里?
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有