Тип Expression <> определен в сборке, на которую нет ссылки.


86

В ASP.NET MVC 4.5.2 Framework.

после ввода

@Html.LabelFor()
or 
@Html.EditorFor()

ввиду

Я получаю сообщение об ошибке: тип "Выражение <>" определен в сборке, на которую нет ссылки. Вы должны добавить ссылку на сборку "System.Core, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089".

Я добавил ссылку на сборку System.Core.dll, версия 4.0.0.0, версия среды выполнения v4.0.30319. а также я сделал в web.config


Ответы:


41

Я столкнулся с той же проблемой, что и вы, хотя и намного позже. Проблема заключалась в том, что мне не удалось получить доступ к представлениям Razor (.cshtml), поскольку я получал сообщение об ошибке, в котором говорилось, что у меня отсутствовала ссылка на сборку, а именно System.Web.Mvc, хотя она была в ссылках на проект. После расследования я заметил, что установленная версия NuGet была 5.2.3, а для проекта требовалась 5.2.0. Решение состоит в том, чтобы понизить версию MVC.

  1. Перейдите в Project-> NuGet Package Manager.
  2. Найдите MVC; это будет первый результат.
  3. Далее следует выбрать переход на более раннюю версию в раскрывающемся списке сведений о пакете NuGet и отправить.

Подтвердите все диалоги, и вы готовы к работе.


14
Как вы заметили, что вашему проекту требуется 5.2.0?
Vanice

3
@Vanice Я думаю, это зависит от версии .NET Framework: .NET 4.5.2 -> MVC 4.0.0; .NET 4.6.0 -> MVC 5.2.0; .NET 4.6.1 -> MVC 5.2.3. (Не подтверждено)
JoaoRibeiro

9
Я использую .net 4.7, но до сих пор вижу эту досадную ошибку
Свен

1
У меня была такая же проблема, оказалось, что для моего значения отладки в web.config было установлено значение false. Установите значение "True" <compilation debug = "true" targetFramework = "4.5" /> <httpRuntime targetFramework = "4.5" />
mlaribi

Я пробовал вышеуказанное решение, оно работает хорошо. Моя версия решения VS была 4.6.2, и я понизил MVC до 5.2.3 с 5.2.4. Итак, я узнал, что MVC 5.2.3 совместим с .Net 4.6.2
Ибрагим Инам

58

Я не уверен, осталась ли у вас эта проблема, но у меня тоже была такая же проблема.

Я смог найти здесь решения

/programming/6496223/compilation-error-in-net-4-0-web-config-linq-not-found

<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Надеюсь, это поможет..


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

1
хорошо! Оно работает. Обратите внимание, что вам следует закрыть и снова открыть файл cshtml, чтобы изменения вступили в силу.
Махди

Это сработало для меня, когда я просмотрел все web.configs и убедился, что версии совпадают, как в stackoverflow.com/a/37381294/8684119
AMG

Это работает, но я нашел это решение немного грязным. В любом случае, в моем случае я добавляю только ссылку на System.Core
T-moty

45

Эта ошибка означает, что Visual Studio не удается найти сборку System.Web.Mvc для работы своего intellisense для представлений Razor. Чтобы исправить это, может потребоваться одно или оба из следующих условий.

  1. Убедитесь, что версия платформы .NET для свойства компиляции в главном файле web.config (в корне веб-сайта) совпадает с версией, указанной в свойствах проекта.

[корень] /Web.config:

<system.web>
    <compilation targetFramework="4.6" />

Свойства проекта:

Свойства проекта

  1. Убедитесь, что версия сборки MVC, указанная в файле views web.config (та, что находится в папке представлений), совпадает с версией сборки MVC, которую вы используете в своем проекте.

[просматривает папку] /web.config:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Справочные свойства сборки MVC:

Версия MVC


3
Это сработало для меня. Огромное спасибо.
vibs2006

1
Это решило и для меня, но не напрямую. Мне пришлось удалить файл с неправильной версией из моей папки bin, обновить mvc через nuget, а затем он поместил правильную версию в мою папку bin, и это сработало. если вы по-прежнему получаете неправильную версию в папке bin после обновления через nuget, удалите существующую в папке bin
Джошуа К.

Спасибо. Я обновил Microsoft.AspNet.Mvc через NuGet до v5.2.7 и начал видеть эту ошибку в файле .schtml, пока приложение все еще работало. Оказалось, что web.config в папке Views в <system.web.webPages.razor> все еще v5.2.3. Помогло изменение до v5.2.7.
vkelman 08

Это сработало - спасибо! Не забыть проверить [Views] /web.config было для меня ключевым моментом. Версия совпадала везде, но не там!
Джей Докинс,

21
  • Закройте файл cshtml
  • Восстановить решение
  • Откройте файл cshtml
  • По-прежнему ошибки? Перезапустить Visual Studio
  • По-прежнему ошибки? Используйте ответ ctm1988

Я пробовал все, что было упомянуто здесь ... но все еще не работает ... при переустановке Visual Studio все работает отлично ... я думал, что причиной является отсутствие зависимостей ...
mansoor

если у вас был проект, который работал и работал нормально, и внезапно возникла эта проблема, то, вероятно, это исправление!
Simon_Weaver

16

Я пробовал большинство из них, что в итоге сработало для меня, так это выгрузка проекта, редактирование файла csproj и добавление следующего:

<Reference Include="System.Core" />

https://stackoverflow.com/a/38371981/2335660


2
оно работает! похоже, что визуальная студия думает, что System.Core уже добавлен, но на самом деле это не так. Так что вам нужно сделать это вручную
isxaker 01


7

У меня была такая же проблема, и ни одно из решений не устранило проблему. Мне пришлось добавить это в свой внутренний web.configмирSystem.Web

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

Я удалил его, когда менял кое-что configвокруг.


пожалуйста, добавьте тег с любой технологией или другим .. Теги не найдены
Vikrant Kashyap

Добавление атрибута compilation / targetFramework сработало для меня.
Том Бауэрс

Я случайно добавил два разных значения для целевой структуры, это решило мою проблему.
Geethanga 02

Это устранило для меня проблему, гибридное приложение asp.net/webforms: я обновил целевую структуру своего приложения до 4.7, не заметил, что эти два параметра web.config по-прежнему указывают на 4.5.
Tom Regan

4

В моем случае это сообщение отображалось только при включенном Resharper. Я очистил кеш Resharper, перезапустил VS, выключил Resharper и снова включил его. Сообщение исчезло.


1
В моем случае просто закройте и перезапустите VS. У меня есть резарпер, но ничего с ним делать не нужно.
JayJay,

3

У меня была такая же проблема с отсутствующей сборкой, и случилось так, что сборка VS2017 не скопировала ее должным образом в папку Bin. Мне помогли следующие шаги:

  • Перейдите к узлу Ссылки веб-проекта.
  • Найдите ссылку на System.Core
  • Откройте окно свойств VS
  • В окне свойств измените Copy Local: False на True

из этого комментария: CS0012: Тип '##### Любой тип #####' определен в сборке, на которую нет ссылки


Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - Из
Steve Gomez,

1
@ СтивГ. Спасибо, Стив! Я его отредактировал.
Раньше

1
Это решило мою проблему, я должен упомянуть, что также потребовался перезапуск Visual Studio, спасибо.
Саид Мусави

3

В Web.config мне нужно было изменить:

  <system.web>
    <compilation debug="true" targetFramework="4.7">

к

  <system.web>
    <httpRuntime targetFramework="4.7" />
    <compilation debug="true" targetFramework="4.7">

1
Спасибо, @juFo! Это фиксированное для меня в Visual Studio 2019 с целевыми рамками проекта MVC 5. My MVC был 4.7.2 , а web.config еще 4.7.1 для targetFrameworkв <httpRuntime>и <compilation>тегах. Просто обновив атрибут, чтобы он правильно отражал версию .NET Framework проекта, я исправил это.
iCode

2

Убедитесь, что для действия сборки файла cshtml установлено значение «Содержимое».

Я использую ReSharper и заметил, что по какой-то причине созданный файл по умолчанию имеет значение «Нет» при вызове шаблона.


2

Добавьте следующее в Web.config (в корне). Я перепробовал абсолютно все из предыдущих предложений, и ничего не работало, пока я не нашел ниже. Надеюсь, это сэкономит время кому-нибудь еще.

Я использую targetFramework = "4.6.1", но меняю его на версию, которую вы используете, если она отличается.

<system.web>
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
</system.web>

2

Добавьте файл System.Core.dll в папку bin вручную. Перезапустите VS и соберите проект . Решено для меня

Были ошибки дизайна во всех представлениях помощников @Html и в моих сетках Kendo.

Добавление сборки System.Core в Web.config ничего не дало, равно как и понижение версии MVC. И ошибка при попытке добавить ссылку на System.Core вручную:

Ссылка на System.Core не может быть добавлена. На этот компонент уже автоматически ссылается система сборки.

Убедитесь, что TargetFramework в свойствах проекта совпадает со значением в проекте web.config.

Скриншот папки bin


1

Для меня в меню проекта была опция «Включить C # 6.0 / VB 14». Выбор этой опции сработал. Раньше я пытался изменить web.config, перезапустить Visual Studio и т. Д., Как было предложено в этом сообщении.


1

Я столкнулся с той же проблемой. В основном проблема заключается в использовании другой версии System.Web.Mvc. Так что лучше всего открыться Tools > Nuget Package Manager > Manage Nuget Packages for Solution. Вы, наверное, можете увидеть System.Web.Mvcна Cosolidateвкладке. Лучшим вариантом будет обновление или возврат к более ранней версии. Если вы используете последнюю .Net 4.6.1версию .Net framework, которая есть в настоящее время , вам следует обновить все System.Web.Mvcверсии до 5.2.4.0. Удачи!


У меня было 12 пакетов, которые нужно было обновить, и sln работал без проблем, когда я все обновил. Спасибо.
Джейми

1

Что ж, я исправил это, исправив ссылку на сборку в /Views/web.config , см. Изображение:

введите описание изображения здесь


1

удалить каталог bin, .vs и obj. после сборки вашего проекта в Visual Studio.


Я часто переключаюсь между версиями своего проекта, некоторые из которых предназначены для разных фреймворков. Это устранило мою справочную ошибку "System.Core". Спасибо за простое напоминание о том, что иногда необходимо очистить среду VS между проверками.
Suncat2000

1

Я сделал ВСЕ вышеперечисленное и в конце концов обнаружил, что для меня это решает (на сайте .net framework 4.7.1 с MVC 5.2.4) добавление этого в корневой файл web.config внутри <compilation>-

<assemblies>
  <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>

0

Так случилось с одним из моих взглядов - все остальные были в порядке. Я сделал следующее:

  • Создать новое представление
  • Скопируйте и вставьте содержимое из старого представления в новое
  • Удалил старую
  • Переименовал новый в старый

0

У меня сработал перезапуск Visual Studio.


Это случилось со мной после некоторых, казалось бы, невинных обновлений NuGet. Это были просто библиотеки вроде jQuery и bootstrap. После обновлений я получил это сообщение об ошибке, и перезапуск Visual Studio исправил его.
Стив Хайнер,

0
  • Закройте файл
  • Очистите раствор
  • Создайте решение
  • Откройте файл повторно

0

Попробуй добавить

using system.Linq.Expressions;


4
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода.
Farkie

0

У меня тоже была эта пробема. Изменение targetFramework="4.5.2"к targetFramwork="4.5" в файле web.config решил.


0

Если вы получили это только в одном или двух файлах CSHTML ... это поврежденный файл.

У меня такое случилось с поврежденным файлом, в котором есть скрытые символы Юникода. Попробуйте скопировать весь текст документа в новый экземпляр блокнота. Очистите содержимое исходного файла и сохраните ... если длина файла> 0, что-то не так.

Удалите файл и сохраните экземпляр блокнота поверх старой версии. Все ошибки у меня исчезли.

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

Я единственный, у кого с Решарпером отношения любви / ненависти?


0

Это может быть вызвано тем, что в вашем решении несколько проектов, которые не нацелены на одну и ту же версию .NET Framework. Например, если ваш проект веб-приложения нацелен на .NET 4.5 и у вас есть ссылка на сборку другого проекта в решении, ориентированного на .NET 4.5.2. Чтобы исправить это, вам нужно изменить свои проекты на одну и ту же версию .NET Framework.


0

Если ни один из ответов не работает, используйте этот. Я столкнулся с той же проблемой! На самом деле файл configuration.cs в папке миграции отсутствовал / был удален. Я удалил папку миграции, а также удалил таблицу миграции из базы данных. Далее в консоли диспетчера пакетов (PM) используются следующие команды:

Enable-Migrations -Force
Add-Migration Initial
update-database

В ходе этого процесса был воссоздан файл configuration.cs, и все работало отлично!


0

Проверьте свойства своего проекта, чтобы получить Target framework. Я решил эту проблему в своем проекте, сопоставив с моей целевой платформой .NET framework 4.6.1 MVC 5.2.3 был подходящим решением. Я получил эту версию MVC от NuGet.


0

В моем случае решение заключалось в том, чтобы переместить ConnectionString внутрь Web.Config. Это заявление должно быть после раздела AppSettings.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.