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

StackOverflow https://stackoverflow.com/questions/602117

  •  03-07-2019
  •  | 
  •  

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

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

  

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

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

mypage.aspx本身的内容是:<%@ Page Language =" C#" AutoEventWireup = QUOT;真"的CodeFile = QUOT; mypage.aspx.cs"继承= QUOT; Services_mypage" %GT;"

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

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

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

有帮助吗?

解决方案

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

编辑(添加关键文字):

  

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

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

也许这就是问题?

其他提示

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

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

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

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

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

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

步骤:

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

    C:\ fuslog   C:\ fuslog \日志

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

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

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

    您可能需要查看“Program Files”;而不是“Program Files(x86)”而不是“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
    
  11. 我通过在我的网站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中使用固定命名和单页程序集

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

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

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

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

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

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

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

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

在我的案例中,重新部署相同的文件也解决了这个问题。

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

BTW:在我的情况下,当C盘空间不足时,错误就开始了。

快乐的编码! Chitec的

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

这是由于异常部署并且在我们的VPS环境中将bin文件与新发布的文件混合。

<强>溶液

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

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

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

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

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

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

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

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

然后问题就解决了。

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

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

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

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

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

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

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

中的MVC版本

注意asp编译器警告消息。

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

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

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

这是VS 2008的解决方案。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top