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

问题描述 投票:40回答:24

我有一个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文件名中看似随机的数字是什么意思,重要的是什么?

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

asp.net deployment webforms
24个回答
23
投票

我没有遇到这个错误,但是经过一番谷歌搜索后我发现了这个链接,我不确定你是否已经看过它了: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
投票

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

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

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


2
投票

我今天遇到了同样的问题。一些论坛告诉您网站中缺少引用,并且在您的情况下确实存在。尽管您已经包含了所有必需的程序集,但您可能正在将您的网站部署在具有3.5框架的IIS服务器中,对吧?

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


1
投票

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

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

顺便说一句:在我的情况下,当C盘空间不足时,错误就开始了。

快乐的编码!科博会


1
投票

我知道错误是在抱怨别的东西,但我保证在我的情况下,问题只是用于asp.net帐户的访问权限(网络服务或应用程序池标识或IUSR)不足以使用该特定文件。

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

解:

需要使用正确的Bin文件夹权限替换特定的文件权限,就像在Bin中正常工作(并且错误)的其他文件一样。


1
投票

首先检查可用的磁盘空间。当我们在托管IIS的硬盘驱动器上用完空间时出现此错误。


0
投票

如果在运行MSBuild脚本时出现此错误,则可能是您的项目是2.0或3.5项目而MSBuild正在使用4.0编译器。尝试将TargetFrameworkMoniker =“3.5”添加到AspNetCompiler指令中。


0
投票

当我在现有网站上部署了一些更改时,我遇到了这个问题。

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

然后问题得到解决。

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


0
投票

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


0
投票

如果有更新,然后重新编译。再次复制bin文件夹中的所有文件以及从其各自文件夹更新的特定文件。


0
投票

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

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

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


20
投票

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


0
投票

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

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


0
投票

我开始使用VWD Express 2012时遇到了同样的问题(在我使用Express 2010之后,以前工作正常)去了我的主机控制面板,并将ASP.NET版本从2.0-Classic更改为4.0 Classic,如图所示。问题消失了。


0
投票

如果您的bin中的.compiled文件不再是项目的一部分,则也会发生此错误。你基本上得到了这个代替404。删除.compiled文件,然后获得404。


0
投票

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


0
投票

这是VS 2008的解决方案。

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

enter image description here


19
投票

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

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

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


8
投票

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

为此,您需要使用名为“Assembly Binding Log Viewer”的工具。此工具将告诉您哪些引用丢失或版本错误。如果缺少/不匹配的参考,那么继续修复它;否则你需要做其他魔术技巧,比如检查应用程序池是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. 选中Enable custom log path并在框中输入以下内容: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>

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


6
投票

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

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

5
投票

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

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

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


3
投票

原来它是MSI中缺少的(非Web)DLL,我认为这是由给出错误的页面使用的。我会说一个非常误导性的错误消息,因为该页面当然是预编译的,但缺少对该DLL的引用。


3
投票

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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.