2011年9月18日

ASP.NET MVC - 升級ASP.NET MVC 3專案至ASP.NET MVC 4

這篇是在官網看到的,因為我覺得滿實用,就順便實作了一次,首先,ASP.NET MVC 4是可以和ASP.NET MVC 3 和平相處的,所以我們可以選擇適合的時間點,將ASP.NET MVC 3換成ASP.NET MVC 4。

另外,官網上建議最簡單的升級方式,就是創建一個新的ASP.NET MVC 4專案,然後把舊的ASP.NET MVC 3的views, controllers, code, and content files等東西,拷貝到新的ASP.NET MVC 4專案,並設定好關聯,最後也別忘了,Web.config也要將原本ASP.NET MVC 3有改過的地方,弄過去到ASP.NET MVC 4。

如要手動升級ASP.NET MVC 3到ASP.NET MVC 4可以依照我下面的步驟去做,內容除了官網的解說外,我也附加上我自己的圖,我相信這樣會比較清楚。

1.修改Web.Config的字串( Web.Config除了根目錄外,還有在View下,還有一個在Area下 )反正所有看到的Web.Config都要留意,將原本的以下字串。

System.Web.Mvc, Version=3.0.0.0
System.Web.WebPages, Version=1.0.0.0
System.Web.Helpers, Version=1.0.0.0
System.Web.WebPages.Razor, Version=1.0.0.0

改為以下字串。

System.Web.Mvc, Version=4.0.0.0
System.Web.WebPages, Version=2.0.0.0
System.Web.Helpers, Version=2.0.0.0,
System.Web.WebPages.Razor, Version=2.0.0.0,

基本上根目錄並沒有System.Web.WebPages.Razor,所以我把剩餘的部分改一改。

image

而View底下的Web.config,就有很多東西要修改了,如果有Area,基本上和View下面的Web.config同。

image

View底下的Web.config還有這裡,滿容易漏掉的。

image

2.在根目錄的Web.config,將webPages更改為"2.0.0.0”,並添加一個新的PreserveLoginUrl,值設為True,如下:

<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="PreserveLoginUrl" value="true" />
<appSettings>

3.在Visual Studio的參考裡面,刪除對 3.0版本的System.Web.Mvc參考( dll )。然後添加一個 System.Web.Mvc(v4.0.0.0)如下:

  1. System.Web.Mvc (v3.0.0.0)
  2. System.Web.WebPages (v1.0.0.0)
  3. System.Web.Razor (v1.0.0.0)
  4. System.Web.WebPages.Deployment (v1.0.0.0)
  5. System.Web.WebPages.Razor (v1.0.0.0)

然後加入以下參考

  1. System.Web.Mvc (v4.0.0.0)
  2. System.Web.WebPages (v2.0.0.0)
  3. System.Web.Razor (v2.0.0.0)
  4. System.Web.WebPages.Deployment (v2.0.0.0)
  5. System.Web.WebPages.Razor (v2.0.0.0)

我之前的專案只有用到System.Web.Mvc和System.Web.WebPages,但我看新開的MVC4專案則有參考到全部,所以這邊我還是全部都參考進去。

image

記得要選對版本。

image

4.在方案總管中,右鍵點擊項目名稱,然後選擇卸載項目。然後再右鍵點擊此名稱,並選擇編輯 ProjectName.csproj。( 這裡要注意一下,如果只有一個專案,是沒辦法卸載的,此時可以直接使用記事本去改,也是可以的。)

image

5.找到ProjectTypeGuids元素,用{E3E379DF- F4C6-4180-9B81-6769533ABE47}取代{E53F8FEA- EAE0-44A6-8774- FFD645390401}。

image

6.儲存,並關閉正在編輯中的(csproj)文件,右鍵點擊該項目,然後選擇重新載入。

7.如果有引用任何第三方元件,且會編譯使用以前版本的ASP.NET MVC,就必須打開根目錄的Web.config文件,並添加以下bindingRedirect元素:

<configuration>
  <!--... elements deleted for clarity ...-->
 
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" 
             publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" 
             publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" 
             publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

以上,完成收工!

參考資料

  1. http://www.asp.net/learn/whitepapers/mvc4-release-notes

沒有留言:

張貼留言