2009-03-02 55 views
35

我有一个使用“发布网站”发布的VS 2005网站,并清除了所有三个复选框。我也有一个部署项目,可以获取发布的文件并创建一个MSI。然后我将该软件包安装在单独的测试服务器上。如何解决ASP.NET错误“文件'nnn.aspx'未被预编译,无法请求。”?

换句话说,整个网站是预编译的。然而,当我去到一个名为“服务”的具体子文件夹的任何.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文件名中的表面上的随机数是什么意思,它是重要的?

我也想提一提,这个问题突然出现,我不知道什么样的变化有可能因为前几天正常工作已经完成(但据我所知,没有的)。

回答

20

我已经没有这个错误,但我通过这一连接传来的是一个谷歌搜索后,我不知道,如果你看过它尚未:http://forums.asp.net/t/956297.aspx

编辑(添加键文本):

当在web.config中指定引用并且部署文件夹/站点不包含安装在系统或bin文件夹中的这些DLL不包含它们(如果它们是私有程序集)时,将出现此错误。 例如:(添加组件=“Namespace1.NameSpace2,版本= XXXX,文化=中性公钥= 31bf3856ad364e35” /) 如果你的web.config中包含的任何组件这样和部署服务器亘古不变的垃圾桶或GAC包含这些assembiles,那么这个错误就会发生。

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

也许这就是问题所在?

+0

+1为缺少的程序集提示(在我的情况下,一些程序集已从GAC中删除) – 2010-09-07 08:18:39

+0

+1也提示我。原来我们有一个缺失的控制组件。 – 2012-06-19 09:50:35

+2

对我而言略有不同,但同样的dll主题。我有一个项目A,它生成了一个dll,其中包含一些在项目B中使用的预编译的用户控件。这两个项目都使用Telerik RadControls,但使用了不同的版本。项目B中未使用A控件的页面发挥作用,这些页面提供了有关版本不匹配的适当消息。然后B中的.asmx服务给了非预先编译的消息非常无益的帮助。同步版本修复了这一切。 – Piwaf 2012-12-21 18:22:17

3

原来是在MSI,我以为是使用的页面,说明出错丢失(非Web)DLL。一个相当误导性的错误信息我会说,因为该页面当然是预编译的,但有一个缺少对该DLL的引用。

+1

误导性的错误消息可能会非常讨厌浪费开发人员的时间 – Axarydax 2011-01-28 08:53:00

2

今天我有同样的问题。一些论坛告诉你在你的网站中缺少参考,它确实在你的情况下。尽管你已经包含了所有必要的程序集,但你可能已经将你的网站部署在一个带有3.5框架的IIS服务器上了,对吧?

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

0

当我对现有网站进行了一些更改时,我正面临着这个问题。

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

然后问题就解决了。

我希望这可能会有所帮助。

0

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

所以也许尝试别的第一次尝试应用重新部署在你面前(bin文件夹中的内容应足够)

BTW:对我来说,当C盘空间用完开始的误差。

快乐编码! ChiTec

0

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

17

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

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

希望能帮助其他一些糟糕的吸盘。

1

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

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

解决

该特定文件权限,需要用正确的Bin文件夹权限,像其他文件,这些文件(和WO该错误)内宾正常工作所取代。

enter image description here

15

当我升级的站点从2.0到4.0,我得到这个错误。该错误是由该站点的root目录中的文件PrecompiledApp.config造成的。一旦我删除该文件,该网站开始工作。

5

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

当你想发布您的网站时,请使用固定命名和单页组件在Visual Studio

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

2

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

0

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

0

在更新的情况下,然后重新编译。再次从bin文件夹复制所有文件,并从各自的文件夹更新特定文件。

0

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

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

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

0

首先检查可用光盘空间。当我们在托管IIS的硬盘上的空间不足时出现此错误。

7

过去几天我一直在努力解决这个问题。至少在我的情况下,错误信息完全是误导性的,与预编译的网站无关。那里有很多文章或帖子给出了许多不同的答案,这只会增加混淆。我个人认为这个错误主要是由于缺少引用或不正确的版本。为了尽可能快地解决问题,您必须排除此问题,或者修复缺失/错误的引用。

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

步骤:

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

    C:\ fuslog C:\ fuslog \日志

  2. 复制大会绑定日志查看到您的服务器位于C :\ fuslog:

    你可以在这样的位置中找到程序

    C:\ Program Files文件(x86)的\微软的SDK \的Windows \ v7.0A \ BIN \ fuslogvw.exe

    你可能需要看看 “程序文件”,而不是 “程序文件(x86)” 或者看看不同的气质而不是“v7”。0A”

  3. 在服务器执行fuslogvw.exe

  4. 点击 “设置...”

  5. 确保 “登录失败绑定到磁盘” 被选中

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

  7. 点击OK

  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> 

我希望这可以帮助别人迅速解决问题。

0

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

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

0

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

Remove additional files at destination

0

我有同样的问题,当我开始使用VWD快递2012(我用的是快递在2010年以后,其用来工作没关系) 去了我的主机控制面板,并从2.0改为ASP.NET版本如图所示 - 经典到4.0经典。问题没有了。

0

对于我来说,我有这样的删除生产文件夹,然后拷贝最多的新文件的脚本。

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

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

0

如果您在bin中包含一个.compiled文件,并且该文件不再是您的项目的一部分,也会发生此错误。本质上,您将收到此代替404。删除.compiled文件,然后你得到404。

1

我遇到了同样的问题。我的问题是固定在这个地图中删除临时文件asp.net文件夹中的文件:

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

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