Почему я получаю «Один или несколько типов, необходимых для компиляции динамического выражения, не могут быть найдены»?

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

  • .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 вручную
  4. Добавлена ​​структура Microsoft.CSharp
  5. Добавлена ​​система System.Xml
  6. Добавлена ​​структура System.Xml.Linq
  7. Убедитесь, что мой Web.Config верен (он написан поверх Web.Debug.Config и т. Д.).
  8. Создал модель , controller и Razor View
  9. Создайте __Layout.cshtml_

Я не понимаю, что еще делать?

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

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

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

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

 ...               ....                 .... 

Для чего это стоит, когда это произошло со мной (в проекте, преобразованном автоматически с MVC2 на MVC3), все, что мне нужно было сделать, это добавить ссылку на проект для Microsoft.CSharp. В моем случае у web.config уже были упомянутые здесь ссылки 4.0, я предполагаю, что у вас есть сценарий обновления.

Хорошо, я получил его работу со следующими шагами.

  1. В файле конфигурации я изменил на в разделе system.web
  2. В конфигурационном файле я заменил на в разделе компиляторов
  3. В Global.asax.cs я добавил ViewEngines.Engines.Add(new RazorViewEngine()); к методу Application_Start()

и я думаю, что да.

Вам необходимо добавить ссылку на версию Microsoft.CSharp.dll – v4.0.30319 в проект. Что доступно в C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0 \ Microsoft.CSharp.dll после завершения VS 2010

Для меня решение заключалось в том, чтобы добавить:

 ViewEngines.Engines.Add(new RazorViewEngine()); 

к методу Application_Start() в global.asax.cs .

Похоже, вы импортируете System.Core 3.5 в свой web.config. Вам нужно импортировать System.Core из frameworks 4.0, потому что ViewBag требует пространство имен System.Dynamic.

На моей машине это выглядит как System.Core v4.0.30319

Я решил это следующим образом:

Сначала я заметил использование gacutil (Global Assembly Cache Utility), в котором содержались две ссылки на System.Core, от одной до версии 4.0 и от одной до версии 3.5. Очевидно, что внутри просмотров бритвы, даже если в проекте у меня была правильная ссылка на версию 4.0, она все еще использовала версию 3.5, и именно поэтому я получал ошибку о динамических типах. Чтобы проверить, открыто ли это ваше дело как администратор командной строки Visual Studio и выполните:

 gacutil -l System.Core 

Чтобы удалить ссылку на старую версию System.Core, я сделал следующие шаги:

 - cd %systemroot%\assembly\ 

Здесь у вас может быть больше одного «gac» -каталога, поэтому вам придется искать в каждом, чтобы найти свой компонент. Для меня это было в каталоге «gac_MSIL».

 - cd gac_msil - cd System.Core - cd __ - erase *.* Say "y" to are you sure. - cd .. - rd __ - cd .. - rd System.Core 

Теперь я снова открыл свое решение в visual studio и ошибка исчезла, он правильно ссылается на System.Core 4.0, и я больше не получаю динамические ошибки 🙂

Надеюсь, это поможет и вам, Best, N.

Это было мое решение:

1) Перейдите к ссылкам на проект

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

3) Измените Копировать Локальный на False, если у вас есть значение True.

Если вы видите это сообщение в своих MVC-представлениях, вам нужно добавить ссылку в Views \ web.config следующим образом:

      (... other references ...)  <-- Add this (...)    

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

Проект по умолчанию в Visual Studio 2010 должен иметь ссылки на Microsoft.CSharp и System.Core.

Если они не указаны в вашем проекте, вам нужно добавить их, и ошибки исчезнут.

Woow!

Я почти год опаздываю, но все же думаю, что я должен ответить на основании моих результатов (13 июля 2013 года в формате 7: 15p PST), связанных с сообщением об ошибке. Это может быть полезно для ребят, которые ищут ответ на сообщение об ошибке:

 "One or more types required to compile a dynamic expression cannot be found." 

поэтому, пожалуйста, прочитайте: у меня было подобное сообщение об ошибке, когда я внедрил System.Dynamic в свой код. Веб-приложение работает плавно, так как у меня была правильная настройка в web.config (targetframework), но когда я поместил app_code в отдельную dll, тогда он начал бросать ошибки во время компиляции. Обратите внимание, что у меня не было app.config в моей dll, поэтому он НЕ МОЖЕТ быть зависим от конфигурации, когда у вас есть это в отдельном проекте DLL, но ссылка на правильную dll.

Я понял, что правильная Microsoft.CSharp.dll находится в "C:\Windows\Microsoft.NET\Framework\v4.0.30319" , и моя dll скомпилирована успешно.

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

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

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

      

в

      

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

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

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

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

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

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

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

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

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

       

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

       

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

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

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

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

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

  

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

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

1) Перейдите к ссылкам на проект

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

3) Измените Копировать Локальное на Истину, если у вас есть значение False.

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

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

С уважением SkippingAdi

Я боролся с этой проблемой в течение нескольких дней и, наконец, понял это.

Все, что я сделал, это удалить из web.config следующее:

         

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

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

  • Новые интересные функции C # 4.0
  • Нет Main () в WPF?
  • C #: динамическое время выполнения
  • Контравариантность объяснялась
  • Разница между ковариацией и противоречием
  • Выражение парса математики
  • Конфликт перегруженных методов с дополнительными параметрами
  • Как визуализировать JavaScript в разделе MasterLayout с частичного просмотра?
  • Когда следует использовать динамическое ключевое слово в c # 4.0?
  • Перенаправление из asp.net web api post action
  • Лучший способ запросить страницу данных и получить общее количество в инфраструктуре сущностей 4.1?
  • Interesting Posts
    Давайте будем гением компьютера.