Asp.net

ASP.NET 編譯器在更新到版本 5.2.2 後無法載入 System.Web.Mvc

  • September 24, 2021

我最近使用此網頁上的說明更新到 MVC 5:

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

我現在收到此錯誤:

無法載入文件或程序集“System.Web.Mvc,Version=5.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依賴項之一。找到的程序集的清單定義與程序集引用不匹配。(來自 HRESULT 的異常:0x80131040)

一個奇怪的行為是,有時錯誤實際上是版本 3.0.0.0,有時是 5.0.0.0。

我做了很多搜尋,但找不到任何有相同錯誤的人,只是人們在配置文件中討論更改版本的類似錯誤,所以這是我的配置條目:

在視圖下:

 <system.web.webPages.razor>
   <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>
     &lt;add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/&gt;
   &lt;/httpHandlers&gt;

   &lt;!--
       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.
   --&gt;
   &lt;pages
       validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&gt;
     &lt;controls&gt;
       &lt;add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /&gt;
     &lt;/controls&gt;
   &lt;/pages&gt;
   &lt;globalization requestEncoding="UTF-8" responseEncoding="UTF-8" uiCulture="en-GB" culture="en-GB" /&gt;
 &lt;/system.web&gt;

 &lt;system.webServer&gt;
   &lt;validation validateIntegratedModeConfiguration="false" /&gt;

   &lt;handlers&gt;
     &lt;remove name="BlockViewHandler"/&gt;
     &lt;add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /&gt;
   &lt;/handlers&gt;
 &lt;/system.webServer&gt;
&lt;/configuration&gt;

還有我的網站 web.config 文件:

   &lt;?xml version="1.0" encoding="utf-8"?&gt;
   &lt;!--
     For more information on how to configure your ASP.NET application, please visit
     http://go.microsoft.com/fwlink/?LinkId=169433
     --&gt;
   &lt;configuration&gt;
     &lt;configSections&gt;
       &lt;!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --&gt;
       &lt;section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /&gt;
     &lt;/configSections&gt;
     &lt;connectionStrings&gt;
       ...
     &lt;/connectionStrings&gt;
     &lt;appSettings&gt;
       &lt;add key="webpages:Version" value="3.0.0.0" /&gt;
       &lt;add key="webpages:Enabled" value="false" /&gt;
       &lt;add key="PreserveLoginUrl" value="true" /&gt;
       &lt;add key="ClientValidationEnabled" value="true" /&gt;
       &lt;add key="UnobtrusiveJavaScriptEnabled" value="true" /&gt;
     &lt;/appSettings&gt;
     &lt;system.web&gt;
       &lt;compilation debug="true" targetFramework="4.5" /&gt;
       &lt;httpRuntime targetFramework="4.5" /&gt;
       &lt;authentication mode="Forms"&gt;
         &lt;forms loginUrl="~/Account/Login" timeout="2880" /&gt;
       &lt;/authentication&gt;
       &lt;pages&gt;
         &lt;namespaces&gt;
           &lt;add namespace="System.Web.Helpers" /&gt;
           &lt;add namespace="System.Web.Mvc" /&gt;
           &lt;add namespace="System.Web.Mvc.Ajax" /&gt;
           &lt;add namespace="System.Web.Mvc.Html" /&gt;
           &lt;add namespace="System.Web.Optimization" /&gt;
           &lt;add namespace="System.Web.Routing" /&gt;
           &lt;add namespace="System.Web.WebPages" /&gt;
         &lt;/namespaces&gt;
       &lt;/pages&gt;
       &lt;globalization requestEncoding="UTF-8" responseEncoding="UTF-8" uiCulture="en-GB" culture="en-GB" /&gt;
     &lt;/system.web&gt;
     &lt;system.webServer&gt;
       &lt;validation validateIntegratedModeConfiguration="false" /&gt;
       &lt;handlers&gt;
         &lt;remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /&gt;
         &lt;remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /&gt;
         &lt;remove name="ExtensionlessUrlHandler-Integrated-4.0" /&gt;
         &lt;add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /&gt;
         &lt;add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /&gt;
         &lt;add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /&gt;
       &lt;/handlers&gt;
     &lt;/system.webServer&gt;
     &lt;runtime&gt;
       &lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt;
         &lt;dependentAssembly&gt;
           &lt;assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /&gt;
           &lt;bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /&gt;
         &lt;/dependentAssembly&gt;
         &lt;dependentAssembly&gt;
           &lt;assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /&gt;
           &lt;bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" /&gt;
         &lt;/dependentAssembly&gt;
         &lt;dependentAssembly&gt;
           &lt;assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /&gt;
           &lt;bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /&gt;
         &lt;/dependentAssembly&gt;
       &lt;/assemblyBinding&gt;
     &lt;/runtime&gt;
     &lt;entityFramework&gt;
       &lt;defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"&gt;
         &lt;parameters&gt;
           &lt;parameter value="v11.0" /&gt;
         &lt;/parameters&gt;
       &lt;/defaultConnectionFactory&gt;
     &lt;/entityFramework&gt;
   &lt;/configuration&gt;

你說你已經升級到5.2.2版本。因此你應該改變

&lt;dependentAssembly&gt;
   &lt;assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /&gt;
   &lt;bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" /&gt;
&lt;/dependentAssembly&gt;

&lt;dependentAssembly&gt;
   &lt;assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /&gt;
   &lt;bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" /&gt;
&lt;/dependentAssembly&gt;

顯然,您需要將所有出現的 MVC 5.0.0.0替換為5.2.2.0

引用自:https://stackoverflow.com/questions/27565072