文章出處

昨天在一個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中最誤導人的錯誤提示?


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()