如何解决ASP.NET错误“文件'nnn.aspx'没有被预编译,不能被请求。”?
我有一个使用“发布网站”发布的VS 2005网站,我清除了所有的三个checkbox。 我也有一个部署项目,拿起发布的文件,并创build一个MSI。 然后,我将该软件包安装在单独的testing服务器上。
换句话说,整个网站是预编译的。 但是,当我去任何名为“服务”的特定子文件夹中的任何.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文件在那里,程序集在那里,问题中的types是在该程序集中存在(我可以在对象浏览器中看到它)。 是否有关.compiled文件的名称或内容? 不知何故,我有错误的版本? .compiled文件名中的表面上的随机数是什么意思,它是重要的?
我也想提一下,这个问题突然出现了,我不确定自从几天前正常工作以来(但据我所知,没有),可以做些什么改变。
我没有这个错误,但一些谷歌search后,我遇到了这个链接,我不知道你是否已经看到它: http : //forums.asp.net/t/956297.aspx
编辑(添加关键文字):
如果在web.config中指定引用,并且部署文件夹/站点不包含安装在系统中的这些dll,或者bin文件夹中不包含这些dll(如果它们是私有程序集),则会出现此错误。 例如:(add assembly =“Namespace1.NameSpace2,Version = xxxx,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”/)如果你的web.config包含像这样的任何程序集并且部署的服务器不包含bin或GAC中的这些集合,错误将会发生。
人们报告说,在目标服务器上丢失的程序集最终成为根本原因,在他们的情况下,但他们有同样的错误。 奇怪的。
也许是这个问题?
正如所有上述答案的脚注,通过重新发布replace缺less的程序集解决了问题…虽然我以前用同样的解决scheme解决了这个问题,但是我刚刚遇到了另一个可能帮助其他人的原因。
我的网站运行的AppPool的“启用32位应用程序”设置为false。 通过应用程序池的“高级设置”对话框将其更改为true,我解决了我的问题。
希望能帮助其他一些不好的吸盘。
当我将网站从2.0升级到4.0时出现此错误。 该错误是由站点root
目录中的PrecompiledApp.config
文件引起的。 一旦我删除该文件,该网站开始工作。
过去几天我一直在努力解决这个问题。 至less在我的情况下,错误信息是完全误导的,与预编译的网站无关。 在那里有很多文章或post,给出了许多不同的答案,只会增加混乱。 我个人认为这个错误主要是由于缺less引用或不正确的版本。 为了尽快解决这个问题,你必须排除这个问题,或者修复缺失/错误的引用。
要做到这一点,您需要使用名为“组装绑定日志查看器”的工具。 这个工具会告诉你哪些引用丢失或有错误的版本。 如果有缺失/不匹配的参考,请继续解决问题; 否则你需要做其他的魔术,比如检查32位的App Pool或者权限。
脚步:
-
在您的服务器上创build以下文件夹
C:\ fuslog C:\ fuslog \ logs
-
将assembly绑定日志查看器复制到C:\ fuslog中的服务器上:
你可以在这样的位置find程序
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ fuslogvw.exe
您可能需要查看“Program Files”而不是“Program Files(x86)”,或者查看不同的“vesions”而不是“v7.0A”
-
在服务器上执行fuslogvw.exe
-
点击“设置…”
-
确保选中“将日志绑定到磁盘失败”
-
选中启用自定义日志path,然后在框中input以下内容:C:\ fuslog \ logs
-
点击确定
-
回收/重置您的应用程序池以强制执行新的绑定
-
点击刷新。 现在你可以在这里看到失败的绑定
-
find确切绑定的更好方法是转到c:\ fuslog \ logs \ Default。 在这里你可以find确切的绑定失败。 有些是不相关的,你需要通过反复试验find关键的一个。 我的是以下失败:
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中使用固定的命名和单页面程序集
你会看到这个问题将得到解决!
事实certificate,这是MSI中的一个丢失的(非networking)DLL,我认为这个错误是由网页使用的。 一个相当误导性的错误消息,我会说,因为该页面是预编译的,但有一个缺less的DLL的引用。
我们通过重新启动AppPool来解决这个问题,尝试了几个其他解决scheme之后。 在这种情况下重新发布不是一个选项。
我今天也有同样的问题。 有些论坛告诉你在你的网站有缺失的参考,它确实在你的情况。 尽pipe你已经包含了所有必要的程序集,但你可能已经把你的网站部署在一个带有3.5框架的IIS服务器上了,对吗?
那么这是我的情况,所以我复制了一个原始的ASPX 3.5网站的web.config文件,并修改了一些部分(删除其他3.5程序集引用),并尝试再次部署。
我知道错误是抱怨别的,但我保证在我的情况下,问题只是没有足够的访问权限 (networking服务或应用程序池标识或IUSR)的asp.net帐户与该特定的文件。
这是由于在我们的VPS环境中不寻常的部署和混合bin文件与新发布的文件。
scheme :
该特定的文件权限需要被正确的Bin文件夹正确工作(和窝,错误)正确的Bin文件夹权限replace。
我遇到了同样的问题。 我的问题是通过删除这张地图中的临时asp.net文件夹中的文件来解决的:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root
重新部署相同的文件也解决了这个问题在我的情况。
所以也许在尝试其他任何事情之前,先尝试再次部署你的应用程序(bin文件夹内容应该足够了)
顺便说一句:在我的情况下,错误开始时,C驱动器空间不足。
快乐的编码! 科博会
如果在运行MSBuild脚本时出现此错误,则可能是您的项目是2.0或3.5项目,MSBuild正在使用4.0编译器。 尝试添加TargetFrameworkMoniker =“3.5”到您的AspNetCompiler指令。
当我对现有网站进行了一些更改时,我正面临着这个问题。
要从问题中恢复,我从bin文件夹中删除所有文件,并重新部署它们。
这个问题就解决了。
我希望这可能会有所帮助。
在我的情况下,我没有上传像AjaxControlToolkit.dll,Telerik.dll等常见的DLL。我上传了整个发布的文件夹,它为我修好了。
在更新的情况下,然后重新编译。 再次从bin文件夹复制所有文件,并从各自的文件夹更新特定文件。
在我的asp.net mvcrazor视图(.cshtml)错误的情况下,/ bin文件夹包含两个.compiled文件的相同的视图。 其中一个是旧的,需要删除。
我还在控制器视图子文件夹中还需要删除另一个视图。
出现问题的原因是我将控制器视图子文件夹中的视图移到了共享文件夹中,但是我的部署过程(Visual Studio发布)并未从服务器中删除过时视图和view.compiled文件。 您可以指示Visual Studio始终清理目标文件夹,但这会使部署过程变慢。
首先检查可用的磁盘空间。 当我们在托pipeIIS的硬盘空间不足时出现此错误。
最后,我发现了这个问题。 如果你像我一样使用MVC框架,请更新您的MVC版本。在我的情况下,我将MVC 4.0.0.0更改为4.0.0.1,并检查所有项目引用的“本地副本”属性为“真”。 之后,我的问题解决了。 请查看所有configuration文件(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包创build期间删除了一些文件。