• ASP.NET最误导人的错误提示:“未预编译文件,因此不能请求该文件”


    昨天在一个ASP.NET MVC项目中,一个预编译后的视图访问时总是报错:

    未预编译文件,因此不能请求该文件(The file has not been pre-compiled, and cannot be requested)

    而对应这个预编译视图的3个地方都正常:

    1)内容为“这是预编译工具生成的标记文件,不应删除!”的.cshtml占位文件正常存在

    2)对应的*.cshtml.7384d3d7.compiled文件正常

    3)对应的App_Web_*.cshtml.7384d3d7.dll文件正常

    百思不得其解,折腾了半天。

    后来实在没办法,放弃预编译,改用动态编译。然后出现下面的错误信息才让人恍然大悟:

    System.IO.FileLoadException: 
    未能加载文件或程序集“System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。
    找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    这个项目用的是MVC 5.2.2,而出问题的视图中调用了一个依赖MVC 5.1的程序集。

    有了这个准确的错误信息,问题很轻松地就可以解决:在web.config中添加如下的配置:

    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
    </dependentAssembly>

    如果不是放弃预编译,改用动态编译,做梦也想不到是这个原因引起的“未预编译文件,因此不能请求该文件”。

    你说这是不是ASP.NET中最误导人的错误提示?

  • 相关阅读:
    WMware下的Linux系统安装VMtools
    VMware虚拟机安装Ubuntu图文攻略
    Python高级编程(三)
    Python高级编程(二)
    Python高级编程(一)
    纯div+css样式弹出泡泡消息框
    EF应用CodeFirst模式,数据迁移的基本用法要点摘记
    sql左连接的误区
    ExtJs,从开始接触到如今,我都觉得你好垃圾阿。。。。
    EntityFramework经典的left join语法
  • 原文地址:https://www.cnblogs.com/dudu/p/not-been-pre-compiled.html
Copyright © 2020-2023  润新知