Почему я получаю сообщение «Не удается найти один или несколько типов, необходимых для компиляции динамического выражения»? - PullRequest
61 голосов
/ 19 августа 2011

У меня был проект, который я обновил с

  • .NET 3.5 MVC v2 до
  • .NET 4.0 MVC v3

Компиляция Я получаю сообщение об ошибке при попытке использовать или установить свойство @ViewBag.Title.

Один или несколько типов, необходимых для компиляции динамического выражения, не найдены. Вам не хватает ссылок на Microsoft.CSharp.dll и System.Core.dll?

Я сделал следующее

  1. Выполнено шагов обновления
  2. Установите целевую платформу на вкладке Проект / Свойства / Приложение на .NET Framwework 4
  3. Добавлен System.Core framework вручную
  4. Добавлен Microsoft.CSharp framework
  5. Добавлен System.Xml framework
  6. Добавлен System.Xml.Linq framework
  7. Убедитесь, что мой Web.Config правильный (перезаписывается Web.Debug.Config и т. Д.)
  8. Создан модель , контроллер и Razor View
  9. Создать __Layout.cshtml_

Я в растерянности относительно того, что еще делать?

EDIT:

Я заметил, что в GAC Gui есть System.Core 3.5.0.0, но нет System.Core 4.0.0.0. Значит ли это, что он запутался и все еще использует предыдущую версию? Или я неправильно понимаю GAC?

EDIT:

Мой web.config выглядит следующим образом

...
<compilation debug="true">
    <assemblies>
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.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.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    </assemblies>
</compilation>
....
<pages>
    <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
<namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.WebPages"/>
    <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.Linq" />
    <add namespace="System.Collections.Generic" />
</namespaces>
</pages>
....

Ответы [ 21 ]

2 голосов
/ 15 июня 2015

У меня была эта проблема, когда я обновил версию MVC в своем проекте.Проблема была в директиве assemblyBinding, Nuget почему-то забыл ее обновить.

Мне пришлось изменить

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>

на

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
2 голосов
/ 25 февраля 2014

Для меня не сработало выше, вместо установки Copy Local = True решена проблема

1 голос
/ 18 марта 2016

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

Это как раз то, что нашел Арман Биматов:

1) Перейти к списку литературы проекта

2) Щелкните правой кнопкой мыши Microsoft.CSharp -> Свойства

3) Измените «Локальное копирование» на «Истина», если оно имеет значение «Ложь».

Я думаю, что это должно как-то иметь дело со сборками, зарегистрированными в GAC, и способом, которым Visual Studio получает «правильную» версию. Я предполагаю, что на моем компьютере разработчика каким-то образом .NET Framework 3.5 был установлен после более новой версии Frameworks (если это вообще возможно), поэтому Visual Studio получает неправильную версию от GAC. Или просто для VS неясно, какую версию выбрать, поэтому требуется более старая версия ...

Если у вас все еще появляется то же сообщение об ошибке, вы также можете попытаться установить для параметра «Копировать локально» значение «Истина» для System.Core Dll и посмотреть, как оно работает.

С уважением SkippingAdi

1 голос
/ 29 мая 2012

Я получил эту ошибку для приложения Windows при использовании Microsoft.Office.Interop.Excel; ...... версии времени выполнения не совместимы между одной или несколькими библиотеками DLL.

МОЕ РЕШЕНИЕ: Я полностью преобразовал свое решение из .NET 4.0 в .NET 3.5

черт возьми, я преобразовал обратно в 4.0, и я снова начал получать ошибку.

на основании этой ошибки попробуйте преобразовать ваше решение в более старую платформу .NET, которая может работать.

========== РЕДАКТИРОВАТЬ =================

2 часа спустя я заканчиваю некоторые ключевые вещи в своем классе взаимодействия Excell, и это работает как обаяние ... по какой-то причине только в .NET 3.5, а не 4.0 мое решение действительно в такой степени

1 голос
/ 18 апреля 2014

Одной из распространенных причин этой проблемы является то, что вы пропустили обновление версии сборки в файле Views/web.config.Мне довольно легко пропустить их в <system.web><pages>, например:

<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">
1 голос
/ 07 февраля 2014

Как я недавно выяснил, некоторые расширения также могут вызывать это.В моем случае удаление расширения AutoHistory 1.0.1 исправило его для меня (MVC5).

1 голос
/ 01 января 2014

Я попробовал все другие предложения в этом файле, и ни одно из них не работало на моем существующем решении MVC 4.Поэтому после обновления моего VS2012 до WebTools 2013.1 для VS 2012 я создал новый проект MVC 5 и, используя файлы нового проекта в качестве основы, удалил все посторонние строки из всех моих файлов web.config.

После этого все мои ошибки и предупреждения компиляции исчезли, и Intellisense начал работать правильно.Полностью удаляя раздел в главном файле web.config окончательно исправил ошибки динамического выражения ViewBag.Title (и других).

1 голос
/ 29 мая 2012

Ничего из вышеперечисленного не помогло мне.С большим поиском и просмотром настроек Web.Config я обнаружил, что этот ответ работает для меня.

Как исправить ошибку IIS "compilerVersion"?

1 голос
/ 16 февраля 2013

Со мной произошло нечто очень похожее, хотя в моем случае я обновил ряд вещей, в том числе с Visual Studio 2010 до Visual Studio 2012. Я следовал всем вышеперечисленным предложениям и все еще страдал. В конце концов я решил воссоздать весь проект. Только когда я попытался повторно добавить аспекты поставщика членства в мой файл web.config, внезапно стало очевидно, где для меня было конфликт версий.

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <clear/>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/AppName"/>
  </providers>
</sessionState>

Хотя, глядя на это сейчас, это очевидно. У типа для предоставления есть определенная версия. Я просто затем удалил версию, и соответствующий тип найден. Поэтому в моем случае резолюция должна была заменить вышеприведенное на:

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <clear/>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers" connectionStringName="DefaultConnection" applicationName="/AppName"/>
  </providers>
</sessionState>

А затем перекомпилируйте. Мне потребовались дни, чтобы найти это, поскольку я искал во всех неправильных местах!

0 голосов
/ 10 марта 2016

Я получаю ту же ошибку после того, как установил пакет MVCSiteMapProvider, чтобы сделать панировочные сухари для своего сайта.

Если вы установили MVCSiteMapProvider и получаете эту ошибку, вам нужно заменить @ViewBag.Title чем-то другим, например, @Html.MvcSiteMap().SiteMapTitle()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...