文章出處
文章列表
昨天在一個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中最誤導人的錯誤提示?
文章列表
全站熱搜