2013年1月4日

ASP.NET MVC - Area出現指定的組件名稱或程式碼庫無效之問題

這算是除錯短篇三部曲的最後一部XDD,不知道為什麼,最近都在處理這些奇奇怪怪的問題;這篇也是短短的一篇解決文章,起因也是朋友問我ASP.NET MVC Area的Url的一些問題,本來想很帥氣的,迅速地寫一篇範例來展現自己 ( 疑!? ),但後來卻發現另外一個問題…Orz…

要還原這個事件,其實很簡單,只要安裝完Visual Studio 2012 Update 1後,隨便打開一個ASP.NET MVC的專案,然後加一個Area,並且隨便設定設定Controller和View;最後打開瀏覽器,就會出現以下畫面…

建立 system.web.webPages.razor/host 的組態區段處理常式時發生錯誤: 指定的組件名稱或程式碼庫無效。 (發生例外狀況於 HRESULT: 0x80131047)

image

好,反正看到錯誤訊息後,大概就知道,是版本的問題了,所以打開view底下的Web.config來看看,位置如下圖。 ( 記住,是Area底下的View底下的Web.config )

image

打開如下,小弟我這邊只擷取段落,大家應該可以明顯地看到,Version後面接的像是變數的東西。( __WebPagesVersion__.0.0 這個字眼 )。

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" 
                  type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, 
                  System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, 
                  Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, 
               System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, 
               Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, 
               System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, 
               Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

我想當初的好意,應該是為了讓Area的樣板可以無關於組件的版本,所以才這樣設計,但不知道為什麼,反而錯在這邊…,所以我們可以做調整,假設我們先調整Razor這個組件,改成特定的版本看看。( 改成Version=2.0.0.0 ),如下。

  <configSections>
    <sectionGroup name="system.web.webPages.razor" 
                  type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, 
                  System.Web.WebPages.Razor, Version=2.0.0.0, 
                  Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, 
               System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, 
               Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, 
               System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, 
               Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

結果就會如同下圖,恩,至少剛剛改的2.0.0.0那個有用了XDDD

image

既然確定了原因,那要怎樣做?,其實很簡單,我們其實可以直接把預設View底下的Web.config拷貝到Area底下的View底下的Web.config就可以了;如下圖,把"根"下的Views目錄,底下的Web.config裡面的內容,複製一份,貼到Test( 這是個Area )底下的Views目錄下的Web.config就可以了。

image

在一次執行,就可以了。( 恩…下圖不是缺圖,是因為我沒在View裡面寫任何文字XDD,所以輸出的View就是一片空白… )

image

大致上就這樣,這部分,未來官方應該會修正,有碰到錯誤的朋友,可以暫時先忍痛一下QQ..

參考網址

2 則留言:

  1. 有反應至connect嗎?

    回覆刪除
  2. KK哥,我沒特別去connect看耶~@@~ ( 交給你了!? (握) )

    回覆刪除