我有一个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中不包含这些集合,那么这个会发生错误。
人们报告说,目标服务器上缺少的程序集最终成为根本原因,在他们的情况下,但他们有与您相同的错误。奇怪的。
也许那就是问题?
对我来说,我有一个脚本删除生产文件夹,然后复制新文件。
该脚本无法正确删除生产文件夹,因为旧文件和新文件混合在一起导致错误。
我手动删除了整个文件夹并成功重新部署...然后更新了脚本。
我今天遇到了同样的问题。一些论坛告诉您网站中缺少引用,并且在您的情况下确实存在。尽管您已经包含了所有必需的程序集,但您可能正在将您的网站部署在具有3.5框架的IIS服务器中,对吧?
好吧,这是我的情况,所以我从原始ASPX 3.5网站复制了web.config文件并修改了一些部分(删除了其他3.5个程序集引用)并尝试再次部署它。
在我的情况下,重新部署相同的文件也解决了这个问题。
所以也许在尝试其他任何事情之前先尝试再次部署你的应用程序(bin文件夹内容应该足够)
顺便说一句:在我的情况下,当C盘空间不足时,错误就开始了。
快乐的编码!科博会
我知道错误是在抱怨别的东西,但我保证在我的情况下,问题只是用于asp.net帐户的访问权限(网络服务或应用程序池标识或IUSR)不足以使用该特定文件。
这是因为在我们的VPS环境中不常地部署和混合bin文件和新发布的文件。
解:
需要使用正确的Bin文件夹权限替换特定的文件权限,就像在Bin中正常工作(并且错误)的其他文件一样。
首先检查可用的磁盘空间。当我们在托管IIS的硬盘驱动器上用完空间时出现此错误。
如果在运行MSBuild脚本时出现此错误,则可能是您的项目是2.0或3.5项目而MSBuild正在使用4.0编译器。尝试将TargetFrameworkMoniker =“3.5”添加到AspNetCompiler指令中。
当我在现有网站上部署了一些更改时,我遇到了这个问题。
要从问题中恢复,我从bin文件夹中删除了所有文件并重新部署它们。
然后问题得到解决。
我希望这对某些人有所帮助。
在我的情况下,我没有上传像AjaxControlToolkit.dll,Telerik.dll等常见的DLL。我上传了整个发布的文件夹,它为我修复了它。
如果有更新,然后重新编译。再次复制bin文件夹中的所有文件以及从其各自文件夹更新的特定文件。
在我的asp.net mvc razor视图(.cshtml)错误的情况下,/ bin文件夹包含两个.compiled文件用于同一视图。其中一个很旧,需要删除。
我还在控制器视图子文件夹中有第二个视图,也需要删除它。
出现问题的原因是我将视图从控制器视图子文件夹移动到Shared文件夹,但是我的部署过程(Visual Studio Publish)没有从服务器中删除过时的视图和view.compiled文件。您可以指示Visual Studio始终清理目标文件夹,但这会使部署过程变慢。
我将网站从2.0升级到4.0时出现此错误。该错误是由站点的PrecompiledApp.config
目录中的文件root
引起的。删除该文件后,该网站开始工作。
最后,我发现了问题。如果您使用像我这样的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中的.compiled文件不再是项目的一部分,则也会发生此错误。你基本上得到了这个代替404。删除.compiled文件,然后获得404。
在我的情况下,'nnn.aspx.xxxxxxxx.compiled'文件已被WebDeploy删除,因为我在同一个Jenkins工作区中同时运行了2个作业。第二个作业在创建WebDeploy包期间删除了一些文件。
正如上述所有答案的脚注一样,通过重新发布来解决问题,以替换丢失的程序集......虽然我之前已经用同样的解决方案解决了这个问题,但我刚刚遇到了可能会帮助其他人的另一个原因。
我的网站运行的AppPool将“启用32位应用程序”设置设置为false。通过应用程序池的“高级设置”对话框将此更改为true,我解决了我的问题。
希望能帮助其他一些可怜的傻瓜。
过去几天我一直在努力解决这个问题。至少在我的情况下,错误消息完全是误导性的,与预编译的网站无关。有很多文章或帖子提供了许多不同的答案,只会增加混乱。我个人认为这个错误主要是由于缺少引用或版本控制不正确引起的。为了尽快解决问题,您必须对此进行排除,或以其他方式修复缺失/错误的引用。
为此,您需要使用名为“Assembly Binding Log Viewer”的工具。此工具将告诉您哪些引用丢失或版本错误。如果缺少/不匹配的参考,那么继续修复它;否则你需要做其他魔术技巧,比如检查应用程序池是32位还是权限。
脚步:
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>
我希望这有助于其他人快速解决问题。
我遇到了同样的问题。通过删除此文件夹中临时asp.net文件文件夹中的文件修复了我的问题:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root
这个错误发生在我身上,我解决了它。
如果要发布站点,请检查在Visual Studio中使用固定命名和单页程序集
你会看到这个问题将会解决!
原来它是MSI中缺少的(非Web)DLL,我认为这是由给出错误的页面使用的。我会说一个非常误导性的错误消息,因为该页面当然是预编译的,但缺少对该DLL的引用。
在尝试了其他几个解决方案之后,我们通过重新启动AppPool来解决这个问题。在这种情况下,重新出版不是一种选择。
这个选项为我解决了这个问题。基本上,它会删除上一次部署后留下的每个孤立文件。