繁体   English   中英

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

[英]How to fix ASP.NET error "The file 'nnn.aspx' has not been pre-compiled, and cannot be requested."?

我有一个使用“发布网站”发布的 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 文件名中看似随机的数字是什么意思,它是否重要?

我还想提一下,这个问题是突然出现的,我不确定自从它在几天前正常工作以来可以进行哪些更改(但据我所知,没有)。

我没有遇到过那个错误,但在谷歌搜索之后我发现了这个链接,我不确定你是否已经看过它: 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 中不包含这些程序集,那么这个会发生错误。

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

也许这就是问题所在?

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

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

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

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

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

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

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

为此,您需要使用名为“Assembly Binding Log Viewer”的工具。 此工具会告诉您哪些参考资料缺失或版本错误。 如果有一个缺失/不匹配的参考,那么继续修复它; 否则,您需要执行其他魔术,例如检查 App Pool 是否为 32 位或权限。

脚步:

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

    C:\\fuslog C:\\fuslog\\logs

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

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

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

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

  3. 在服务器上执行 fuslogvw.exe

  4. 点击“设置...”

  5. 确保选中“日志绑定失败到磁盘”

  6. 选中启用自定义日志路径并在框中输入以下内容:C:\\fuslog\\logs

  7. 点击确定

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

  9. 单击刷新。 现在你可以在这里看到失败的绑定

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

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

我通过在我的网站 web.config 中添加以下条目来解决该问题:

<configuration>
    ...
    <runtime>
        ...
        <!-- Added this entry to fix the issue -->
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.0" />
        </dependentAssembly>
        ...
    </runtime>
    ...
</configuration>

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

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

当您要发布站点时,请在 Visual Studio 中选中使用固定命名和单页程序集

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

在尝试了其他几种解决方案后,我们通过重新启动 AppPool 解决了这个问题。 在这种情况下,重新发布不是一种选择。

结果是 MSI 中缺少(非 Web)DLL,我认为它被给出错误的页面使用了。 我想说的是一个非常具有误导性的错误消息,因为该页面肯定是预编译的,但缺少对该 DLL 的引用。

我今天遇到了同样的问题。 一些论坛说您的网站缺少参考资料,在您的情况下确实如此。 尽管您已经包含了所有必要的程序集,但您可能正在使用 3.5 框架在 IIS 服务器中部署您的网站,对吗?

嗯,这是我的情况,所以我从原始 ASPX 3.5 网站复制了 web.config 文件并修改了一些部分(删除了其他 3.5 程序集引用),然后再次尝试部署它。

这个选项为我解决了这个问题。 基本上,它会删除上次部署后留下的每个孤立文件。

在目的地删除其他文件

对我来说,我有一个脚本可以删除生产文件夹,然后复制新文件。

该脚本未能正确删除生产文件夹,导致旧文件和新文件混合在一起导致错误。

我手动删除了整个文件夹并成功重新部署...然后更新了脚本。

此问题可能由许多不同的原因引起。 我的页面偶尔会醒来,然后突然出现提到的错误。 这是一个内存压力相关的问题
这个线程对我来说是正确的答案,我也在那里发布了我的解决方法。

首先检查可用磁盘空间。 当托管 IIS 的硬盘驱动器空间不足时,我收到此错误。

如果您在 bin 中有一个 .compiled 文件的页面不再属于您的项目,也会发生此错误。 您基本上会收到它来代替 404。 删除 .compiled 文件,然后你会得到 404。

在我的情况下,重新部署相同的文件也解决了这个问题。

所以也许在尝试其他任何事情之前,首先尝试再次部署您的应用程序(bin 文件夹内容应该足够了)

顺便说一句:在我的情况下,当 C 驱动器空间不足时开始出现错误。

快乐编码! 奇特

我知道错误是在抱怨其他事情,但我保证在我的情况下,问题只是 asp.net 帐户的访问权限(网络服务或应用程序池标识或 IUSR)不足,无法处理该特定文件。

这是由于在我们的 VPS 环境中不寻常地部署和混合 bin 文件与新发布的文件。

解决方案

需要用正确的 Bin 文件夹权限替换特定的文件权限,例如 Bin 内正常工作的其他文件(以及错误)。

在此处输入图片说明

在我的例子中,我没有上传像 AjaxControlToolkit.dll、Telerik.dll 等常见的 DLL。我上传了整个发布的文件夹,它为我修复了它。

万一更新了再重新编译。 再次复制 bin 文件夹中的所有文件,以及从其各自文件夹中更新的特定文件。

在我的 asp.net mvc razor 视图 (.cshtml) 错误的情况下,/bin 文件夹包含同一视图的两个 .compiled 文件。 其中之一是旧的,需要删除。

我在控制器视图子文件夹中还有第二个视图,它也需要删除。

出现问题的原因是我将视图从控制器视图子文件夹移动到共享文件夹,但是我的部署过程(Visual Studio 发布)没有从服务器中删除过时的视图和 view.compiled 文件。 您可以指示 Visual Studio 始终清理目标文件夹,但这会使部署过程变慢。

终于,我找到了问题所在。 如果您像我一样使用 MVC 框架,请更新您的 MVC 版本。在我的情况下,我将 MVC 4.0.0.0 更改为 4.0.0.1,并将所有项目引用的“本地副本”属性检查为“True”。 之后我的问题就解决了。 请检查所有配置文件中的 MVC 版本(4.0.0.0->4.0.0.1)

并注意 asp 编译器警告消息。

我在开始使用 VWD Express 2012 时遇到了同样的问题(在我使用 Express 2010 之后,它曾经可以正常工作)转到我的托管控制面板并将 ASP.NET 版本从 2.0-Classic 更改为 4.0 Classic,如图所示。 问题没了。

当我对现有站点进行一些更改时,我遇到了这个问题。

为了从这个问题中恢复过来,我从 bin 文件夹中删除了所有文件并重新部署了它们。

然后问题就解决了。

我希望这可能对某人有所帮助。

在我的情况下,WebDeploy 删除了“nnn.aspx.xxxxxxxx.compiled”文件,因为我在同一个 Jenkins 工作区中同时运行了 2 个作业。 第二个作业在 WebDeploy 包创建期间删除了一些文件。

这是 VS 2008 的解决方案。

请勾选如下所示的框以解决问题。

在此处输入图片说明

如果您在运行 MSBuild 脚本时遇到此错误,很可能您的项目是 2.0 或 3.5 项目并且 MSBuild 使用的是 4.0 编译器。 尝试添加:

TargetFrameworkMoniker="3.5"

到您的 AspNetCompiler 指令。

在网站根文件夹下,有一个名为 PrecompiledApp.config 的文件,更新 updatable="true" 后,网站又可以正常工作了。

"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM