[ASP.NET] HTTP 500 與 Microsoft.Web.Infrastructure.dll 找不到

記錄一下部署 ASP.NET MVC 應用程式時碰到的問題。

環境:ASP.NET 4.5,Windows 8.1 和 Windows Server 2008 都會出現下列問題。

問題 1

瀏覽網站首頁時出現錯誤:


查看 IIS log,裡面沒錯誤;Windows 事件日誌裡面也沒有錯誤紀錄。

在開發機器上使用 Visual Studio 2013 來開啟網站(IIS Express)沒問題,但是在同一台開發機器上,用 IIS 來運行網站,則發生同樣錯誤。

猜測 web.config 裡面有文章。逐次刪減組態檔中的各個區段來縮小可疑範圍。結果疑犯為:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>


c:\Windows\System32\inetsrv\config\applicationHost.config 裡面也找得到同樣的 name 值。將 web.config 中的這個 name 屬性的值改成別的(例如 ExtensionlessWhatTheHell),就解決了。這樣看來,似乎是 name 重複定義的緣故。

問題 2

解決前述問題之後,部署至目標環境,瀏覽網站首頁時出現另一個錯誤:

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. 系統找不到指定的檔案。

到 GAC 目錄下查看,果然沒有這個 DLL 檔案。

確認 .NET Framework 4.5 已經安裝,且使用安裝程式執行過「修復」動作。問題仍在。

接著到官網下載 ASP.NET MVC 4:http://www.asp.net/mvc/mvc4。安裝之後,問題就解決了。(聽說也可以把這個 Microsoft.Web.Infrastructure.dll 放在網站的 bin 目錄下一併部署,沒特別去試。)

Copyright © 2012. Huan-Lin 學習筆記 - All Rights Reserved
Powered by Blogger
Template Design by Cool Blogger Tutorials
Published by Templates Doctor