InvalidCastException видаляється після встановлення ASP.NET MVC 4 Beta


81

Я отримую наступний виняток після встановлення ASP.NET MVC 4 Beta на машині з ASP.NET MVC 3.

System.InvalidCastException було оброблено кодом користувача Message = [A] System.Web.WebPages.Razor.Configuration.HostSection не може бути передано в [B] System.Web.WebPages.Razor.Configuration.HostSection. Тип A бере початок із 'System.Web.WebPages.Razor, Версія = 1.0.0.0, Культура = нейтральна, PublicKeyToken = 31bf3856ad364e35' у контексті 'За замовчуванням' у розташуванні 'C: \ Windows \ Microsoft.Net \ Assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Тип B бере свій початок з 'System.Web.WebPages.Razor, Версія = 2.0.0.0, Культура = нейтральна, PublicKeyToken = 31bf3856ad364e35' у контексті 'За замовчуванням' у розташуванні 'C: \ Windows \ Microsoft.Net \ Assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0. 0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Джерело = System.Web.WebPages.Razor

StackTrace:

на System.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection (String virtualPath) у System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig (String virtualPath, String fiziчний шлях) на System.Web.Rozor. System.Web.WebPages.Razor.RazorBuildProvider.CreateHost () в System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode () в System.Web.WebPages.Razor.RazorBuildProvider.get_Code.Provider. GetCompilerTypeFromBuildProvider (BuildProvider buildProvider) на System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders () на System.Web.Compilation.BuildProvidersCompiler.PerformBuild () на System.Web.Managerlation.CompileWebFile (віртуальний_путь віртуальний_путь) при System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (віртуальний_путь віртуальний_путь, булевої noBuild, булевої allowCrossApp, Boolean, Boolean allowBuildInPrecompile throwIfNotFound, Boolean ensureIsUpToDate) при System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (HttpContext контексті, віртуальний_путь віртуальний_путь , Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean secureIsUpToDate) в System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath BowBavBavBainBrossPart BowBainBrossPart BowBainCrossApp. Web.Mvc.IBuildManager.FileExists (рядок virtualPath) у System.Web.Mvc.BuildManagerViewEngine.FileExists (ControllerContext controllerContext, String virtualPath) у System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName (ControllerContext controllerContext, List`1 location, String name, String controllerName, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee, String areaNamee. Mvc.VirtualPathProviderViewEngine.GetPath (ControllerContext controllerContext, String [] location, String [] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String []PvP. (ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) у System.Web.Mvc.ViewEngineCollection. <> C__DisplayClassc.b__b (IViewEngine e) в System.Web.Mvc.ViewEngineCollection.Find (пошук Func`2, Boolean trackSearchedPaths) у System.Web.Mvc.ViewEngineCollection.FindView (ControllerContext controllerContext, String masterNameb, String masterNameb, String viewNameVb .ViewResult.FindView (ControllerContext context) at System.Web.Mvc.ViewResultBase.ExecuteResult (ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContextRecon.Context. c__DisplayClass1c.b__19 () на System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (фільтр IResultFilter, ResultExecutingContext preContext, Func`1 продовження) в System.Web.Mvc.ControllerActionInvocis. <cca.> c__DisplayClass1e. Mvc.Controller.ExecuteCore () на [project_namespace] .Controllers.GlobalizationController.ExecuteCore () у [file_path] на System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) на System.Web.Mbc. Mvc.IController.Execute (RequestContext requestContext) в System.Web.Mvc.MvcHandler. <> C__DisplayClass6. <> C__DisplayClassb.b__5 () в System.Web.Mvc.Async.AsyncResultWrapper. <(Cla). Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass8`1.b__7 (IAsyncResult _) на System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () у System.Web.Mvc.MvcHandler__ <cs____). System.Web.Mvc.SecurityUtil.b__0 (Action f) на System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Дія дії) на System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) на System.Web.Mvc.Mndler. System.Web.IHttpAsyncHandler.EndProcessRequest (результат IAsyncResult) на System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () на System.Web.SeecuteSopeEsection.Protext.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () на System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () на System.Web.Mvc.SecurityUtil.b__0 (Дія f) на System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (Дія дії) у System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) на System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.Ept. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () на System.Web.HttpApplication.ExecuteStep (крок IExecutionStep, логічний і виконаний синхронно)Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () на System.Web.Mvc.MvcHandler. <> C__DisplayClasse.b__d () на System.Web.Mvc.SecurityUtil.b__0 (Дія f) на System.Web. Mvc.SecurityUtil.ProcessInApplicationTrust (Дія дії) у System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) на System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.Ept. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () на System.Web.HttpApplication.ExecuteStep (крок IExecutionStep, логічний і виконаний синхронно)b__0 (Дія f) у System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Дія дії) у System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) у System.Web.Mvc.MvcHandler.System.WebncRendncRendncRendncRendncRendnc. Результат IAsyncResult) на System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () на System.Web.HttpApplication.ExecuteStep (IExecutionStep stepb__0 (Дія f) у System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Дія дії) у System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) у System.Web.Mvc.MvcHandler.System.WebncRendncRendncRendncRendncRendnc. Результат IAsyncResult) на System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () на System.Web.HttpApplication.ExecuteStep (IExecutionStep stepHttpApplication.IExecutionStep.Execute () на System.Web.HttpApplication.ExecuteStep (крок IExecutionStep, логічний і виконаний синхронно)HttpApplication.IExecutionStep.Execute () у System.Web.HttpApplication.ExecuteStep (крок IExecutionStep, логічний і виконаний синхронно)

Це мене повністю блокує, і хоча я хотів би зберегти бета-версію, можливо, мені доведеться повністю її видалити, щоб позбутися винятку.


1
Ви випадково запускаєте попередній перегляд .net 4.5 Dev? (Ця несумісна з поточною бета-версією) (лише для запису, чи не я проголосував, питання є законним)
Майкл Стум

1
Ні, я взагалі не запускаю 4.5.
Нікос Баксеваніс

3
Серйозно, чому за це не голосують? Я надаю відгук про те, що може трапитися з іншими.
Нікос Баксеваніс

@MichaelStum ОК не турбуйтеся. :)
Нікос Баксеваніс

Вибачте за непорозуміння. Я намагався "обрати" це запитання і помилково натиснув = P Проголосування проти видалено, вибране додано правильно цього разу.
Джош Дарнелл

Відповіді:


31

Спробуйте додати наступне у своєму web.config:

<appSettings>
  <add key="webpages:Version" value="1.0.0.0"/>
</appSettings>

Проблема може бути пов’язана з тим, що зареєстровано кілька постачальників збірки та отримано останній перемогу.


101

У мене була та сама проблема, але під час перенесення ASP.NET MVC 3 на ASP.NET MVC 4. Таким чином я перейшов до цієї теми. Я знайшов вирішення проблеми, але її джерело інше, воно не з WebPagesверсії.

Я дотримувався офіційного керівництва (так би мовити) Оновлення проекту ASP.NET MVC 3 до ASP.NET MVC 4 .

Щоб вирішити проблему, потрібно додати в Web.Config (можливо, навколо раніше доданих):

<runtime><!-- Should be there by default, near end -->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><!-- Should be there by default -->
    <dependentAssembly>..</dependentAssembly><!-- Should be there by default -->
        ... some other dependecy redirects ...

    <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor"
            publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>

        ... some other dependency redirects ...
    </assemblyBinding>
</runtime>

Також у примітках не згадується про зміну Посилання на System.Web.Helpers з 1.0.0.0 на 2.0.0.0 (видалити та додати нову).


2
+1 Дякую за завантаження. Однією з незначних змін я зробив, щоб використовувати oldVersion="1.0.0.0-2.0.0.0"лише для того, щоб дотримуватися узгодженості, використаної в шаблоні проекту MVC4. Цікаво, що dependentAssemblyfor System.Web.WebPages.Razorтакож відсутній у кореневій Web.config у шаблоні проекту MVC4.
Scotty.NET

1
У мене була подібна проблема з оновленням пакетів MVC 4 NuGet до 5.1.1, вирішеною вище, алеoldVersion="2.0.0.0" newVersion="3.0.0.0"
Люк Пуплетт

34

Ще одне, досить пізнє рішення ... Я зіткнувся з цією ж проблемою. Виконав усі виправлення, перелічені тут (Дякую всім !!!), але помилку не вдалось уникнути. Нарешті, у відчаї я знайшов файл web.config у каталозі Views. У цьому файлі я знайшов кілька посилань на версію System.Web.Mvc і підніс їх до "4.0.0.0". Що ще важливіше, я знайшов наступні рядки та оновив номери версій для "system.web.webPages.Razor" з "1.0.0.0" на "2.0.0.0", і раптом все знову запрацювало. Сподіваємось, це допоможе комусь іншому.

<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>

Стів Г.


1
Також не забувайте про web.config у розділі Області / Перегляди, якщо Ви використовуєте Області.
Антонін Єлінек

5

Я знайшов інший спосіб змусити це працювати, разом із тайванським блогом щодо оновлення з MVC 2 до MVC 3: http://blog.kkbruce.net/2011_04_01_archive.html (Ви можете насправді використовувати Microsoft Translate в IE10, щоб побачити англійська версія, і це досить хороший переклад ...)

Фокус полягає у тому, щоб знайти всі версії, що стосуються MVC3 (такі як збірки Razor, Mvc, Helper, ви дізнаєтесь, що це таке, якщо ви перейдете до своїх посилань і перевірите всі новіші версії згаданої збірки) і зміните їх із 1.0.0.0 - 2.0.0.0 і від 3.0.0.0 - 4.0.0.0 (оскільки відкриті ключі однакові). Ви також можете спробувати видалити версії відповідно до блогу.

Інша важлива річ - ці налаштування є у всіх Web.Configs. Отже, не тільки під вашим корінням, але і під Перегляд, Площа / {Площа} / Перегляд тощо.

Я вважаю, що це рішення може дозволити вам повністю перейти на MVC4 замість того, щоб мати гібрид, який у мене так чи інакше не працював.


4
  1. У Visual Studio створіть нову програму ASP.NET MVC 4 "для одноразового використання" в окремій папці.
  2. Замініть файл web.config у папці Views на щойно створений файл Views web.config із нової програми для викиду.

Ви помітите:

System.Web.WebPages.Razorзміни від Version=1.0.0.0до Version=2.0.0.0 System.Web.Mvcзміни від Version=3.0.0.0доVersion=4.0.0.0


3

Якщо у вас виникла ця проблема, і ви спробували наведені вище рішення, але це не працює, будь ласка, перевірте web.config у папці Views. Можуть існувати деякі конфігурації, які суперечать файлу Web.config у кореневій папці програми


0

Частина вашого коду працює на поточних бітах MVC, тоді як інші були витіснені до нових. Не розуміючи коду, я не можу сказати вам, який конкретний біт викликає проблему.

Сказавши це, я ніколи не буду встановлювати бета-версію на машині розвитку виробництва. У наш час створити віртуальну машину та запустити бета-версію зображення надто просто. У Windows 7+ ви можете завантажити зображення з металу і не приймати перфоманс, якщо вам це потрібно (за допомогою бета-версій інструменту розробника, часто це потрібно).


Так, але ця бета-версія має ліцензію на запуску. Зрештою, це все
одно на віртуальній машині,

Вам потрібно визначити, який біт у 3 запущений у 4, оскільки саме тут у вас виникає конфлікт. Те ж саме трапилось у веб-формах, коли вони перейшли у часовий проміжок .NET 2, і це було цілком проблемою з будь-якими доповненнями (наприклад, MVC?).
Gregory A Beamer

Насправді це дуже великий проект ASP.NET MVC 3. Ніщо не працює в 4. Я не міг запустити проект 3, і все. Додавши <add key = "webpages: Version" value = "1.0.0.0" /> в елемент appSettings це вирішено.
Нікос Баксеваніс

0

За повнотою ...

Ви також можете просто взагалі вимкнути веб-сторінки, якщо ними не користуєтесь.

<appSettings>
    <add key="webpages:Enabled" value="false" />
</appSettings>

(Я досі не зовсім зрозумілий зв’язок між видами бритви та веб-сторінками, але, схоже, мій додаток MVC із видами бритви все ще працює з вимкненими веб-сторінками.)


0

Також останнім кроком очистіть папку bin від проекту, звідки походить помилка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.