asp.net mvc本地程式集和GAC的程式集衝突解決方案

來源:互聯網
上載者:User

一個從asp.net mvc 3升級到asp.net mvc 4的項目發生了如下錯誤:

[A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_1.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. Type B originates from 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\7c2060f6\6145b34e\assembly\dl3\9036b7c7\fc8023c0_73fecb01\System.Web.WebPages.Razor.DLL'.

這是因為本地程式集和GAC的程式集衝突了, 是因為在Web Pages 1.0中他在web.config內新增了一個配置節點。Web Pages 1.0在Web.config中目前我已發現到新增了一個配置節點,路徑在~/Views/web.config.而不是web.config.

<configuration>

   <system.web.webPages.razor /> <!--注意他於常用的system.web同級—>

   <system.web />

...

</configuration>

修改~/Views/web.config成如下:

<?xml version="1.0"?><configuration>  <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=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />    </sectionGroup>  </configSections>  <system.web.webPages.razor>    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />    <pages pageBaseType="System.Web.Mvc.WebViewPage">      <namespaces>        <add namespace="System.Web.Mvc" />        <add namespace="System.Web.Mvc.Ajax" />        <add namespace="System.Web.Mvc.Html" />        <add namespace="System.Web.Optimization"/>        <add namespace="System.Web.Routing" />      </namespaces>    </pages>  </system.web.webPages.razor>  <appSettings>    <add key="webpages:Enabled" value="false" />  </appSettings>  <system.web>    <httpHandlers>      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>    </httpHandlers>    <!--        Enabling request validation in view pages would cause validation to occur        after the input has already been processed by the controller. By default        MVC performs request validation before a controller processes the input.        To change this behavior apply the ValidateInputAttribute to a        controller or action.    -->    <pages        validateRequest="false"        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">      <controls>        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />      </controls>    </pages>  </system.web>  <system.webServer>    <validation validateIntegratedModeConfiguration="false" />    <handlers>      <remove name="BlockViewHandler"/>      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />    </handlers>  </system.webServer></configuration>

接著修改~/web.config檔案

<system.web>

  <compilation debug="true" targetFramework="4.0">

    <assemblies>

      <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

      <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

      <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

      <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

      <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

    </assemblies>

  </compilation>

  <authentication mode="Forms"></authentication>

  <pages>

    <namespaces>

      <add namespace="System.Web.Helpers" />

      <add namespace="System.Web.Mvc" />

      <add namespace="System.Web.Mvc.Ajax" />

      <add namespace="System.Web.Mvc.Html" />

      <add namespace="System.Web.Routing" />

      <add namespace="System.Web.WebPages" />

    </namespaces>

  </pages>

</system.web>

具體也可以參照 ASP.NET MVC3 系列教程 - 如何使項目Debug進MVC3原始碼。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.