Я пытаюсь создать строго типизированное представление на основе класса из другой сборки. По какой-то причине в моем представлении Razor, похоже, не видны другие сборки, на которые есть ссылки в моем проекте. например
@model MyClasses.MyModel
приводит к ошибке в Visual Studio 2010: « MyClasses
Не удалось найти тип или имя пространства имен (вам не хватает директивы using или ссылки на сборку?)».
Тот же класс, на который есть ссылка в стандартном механизме представления, работает нормально. У меня такая же проблема, пытаясь ссылаться на класс в теле моего представления.
Мне что-то не хватает в Razor или мне нужно как-то ссылаться на сборку?
asp.net-mvc
asp.net-mvc-3
razor
Nickwesselman
источник
источник
Ответы:
Существует новый раздел конфигурации, который используется для ссылки на пространства имен для представлений Razor.
Откройте
web.config
файл в своейViews
папке и убедитесь, что в нем есть следующее:В качестве альтернативы вы можете добавить операторы using в общий макет:
После редактирования Web.config перезапустите Visual Studio, чтобы изменения вступили в силу.
источник
Copy Local = true
. В противном случае внешние сборки могут не работать.У меня была такая же проблема: MVC3 Project MyCore.Web ссылался на пространство имен MyCore.DBLayer из другого проекта в том же решении (с именем сборки MyCoreDBLayer). Все объекты из MyCore.DBLayer отлично работали в контроллерах и моделях, но не выполнялись в представлениях Razor с ошибкой «Тип или имя пространства имен« DBLayer »не существует в пространстве имен« MyCore »(отсутствует ли ссылка на сборку?)», Которая была явно не так.
Добавление ссылки на сборку в раздел system.web / compilation / assemblies корневого файла web.config устранило проблему. Теперь раздел выглядит так:
Пропуск версии, культуры и токена пока допустим, но в будущем это будет исправлено.
источник
Views/web.config
и он работал, когда он был помещен туда.В моем случае отдельный проект, содержащий пространство имен, был консольным приложением. Изменение его на библиотеку классов устранило проблему.
источник
Ничего из вышеперечисленного у меня тоже не помогло;
Но я наконец нашел то, что сработало для меня:
Это произошло потому, что мои выходные данные сборки были отправлены в bin \ Debug \ для конфигурации отладки и bin \ Release \ для конфигураций Release. Как только я изменил конфигурацию сборки на "bin \" для всех конфигураций (как показано на изображении ниже), все стало работать как надо !!!
Я понятия не имею, почему разделение ваших сборок по папкам Release и Debug должно приводить к нарушению синтаксиса Razor, но, похоже, это связано с тем, что что-то не может найти сборки. Для меня проекты, в которых были проблемы с синтаксисом бритвы, на самом деле являются моими проектами «библиотеки бритвы». Они заданы как проекты приложений, однако я использую их как библиотеки классов с RazorGenerator для компиляции своих представлений. Когда я действительно попытался запустить один из этих проектов напрямую, это вызвало следующую ошибку конфигурации:
Это привело меня к попытке изменить вывод сборки, так как я заметил, что для всех веб-проектов вывод сборки всегда находится непосредственно в папке bin, в отличие от библиотеки классов по умолчанию, в которых есть как папки выпуска, так и папки отладки.
источник
Кажется, вы ищете этот ответ: https://stackoverflow.com/a/4136773/176877
То есть откройте внутренний Views \ Web.Config (НЕ корневой) и добавьте пространство имен под тегом Pages:
Сохраните это, затем закройте и снова откройте файл Razor.
Если вы используете области, вам необходимо сделать это для каждого Web.Config в каждой области.
Visual Studio с годами стала более сложной, поэтому может потребоваться закрыть файл Razor, выполняющий сборку отладки, а затем повторно открыть файл Razor, или, в худшем случае, потребуется перезапустить Visual Studio. Но в конечном итоге он представит вам файл Razor, как если бы все в этом списке пространств имен было в операторах @using в верхней части всех ваших представлений.
источник
В ASP.NET Core MVC решение состоит в том, чтобы добавить
using
файл _ViewImports.cshtml вместо того, чтобы помещать его web.config в папку View при работе с ASP.NET MVC 5._ViewImports.cshtml
Посмотреть
источник
Что касается меня, я ссылался на проект, который был консольным приложением. Он был настроен на сборку как exe (консольное приложение) вместо библиотеки классов (DLL). Когда я изменил это, я смог без проблем видеть модели из этого отдельного проекта.
источник
Я получал ту же ошибку при попытке использовать объекты Smo в представлении Razor. По-видимому, это связано с тем, что Razor не может найти библиотеки DLL, на которые есть ссылки в проекте. Я решил эту проблему, установив для параметра «Копировать локально» значение true для всех библиотек Smo, однако может быть лучшее решение (см. Ссылку Czechdude выше). Редактирование @using и web.config бесполезно, потому что они нужны только в том случае, если вы хотите опустить пространство имен часть из имен типов (например, Server вместо Microsoft.SqlServer.Management.Smo.Server)
источник
Я получал аналогичную ошибку после переноса моей машины разработчика с Win7 32bit на Win7 64bit. Сообщение об ошибке:
...\Web\Views\Login.cshtml: ASP.net runtime error: [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from System.Web.WebPages.Razor, Version=1.0.0.0 ... Type B originates from ... Version=2.0.0.0
Оказывается, у меня были обе версии в GAC. Представление
web.config
ссылалось на v1, но приложение ссылалось на v2. Удалены упомянутые сборки и повторно добавлена версия v1. офSystem.Web.WebPages.Razor
и др.источник
ну, для меня все было иначе. Мне не хватало сборки моего проекта консольного приложения с проектом MVC. Итак, добавления ссылки было недостаточно.
ну, это может помочь кому-то другому. перейдите в корневой файл web.config
system.web
->compilation
-> добавьте ссылку на свой проект следующим образом.<assemblies> <add assembly="Your.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </assemblies>
источник
У меня тоже была такая же проблема, но проблема была в целевой структуре сборки .
Указанная сборка находилась в .NET Framework 4.6, где для проекта задано .NET framework 4.5.
Надеюсь, это поможет тому, кто напортачил с фреймворками.
источник
Имя вашей ПАПКИ проекта должно быть таким же. Если имя вашего проекта или решения отличается, MVC причинит вам вред.
Пример: если вы создаете новое приложение, и оно получает имя по умолчанию Webapplicaiton1, то это пространство имен будет создано. Итак, позвольте нам сказать, что вы не хотите иметь это пространство имен, поэтому из VS вы меняете везде, где видите, на «MyNamespace». Вы также выполните поиск и замените весь код из «Webapplication1» и замените его на «MyNamespace». Это также изменяет файл web.config, так что он включает
Теперь все будет работать, кроме представлений Razor.
RazorViews не может его найти, потому что есть какая-то странная зависимость от FOLDERNAME проекта. Ужасный дизайн.
Я проверил это частично, скопировав свои файлы в новое решение, и единственное отличие - это имя папки.
источник
Попробуйте добавить пространство имен, в котором вы
MyClasses
находитесь, в web.config в разделе<pages> <namespaces></namespaces> </pages>
источник
включить все пространство имен
источник
Ни один из этих https://stackoverflow.com/a/7597360/808128 не работает для меня. Даже «добавление ссылки на сборку в раздел system.web / compilation / assemblies корневого файла web.config». Таким образом, у меня остается два пути: 1) добавить общедоступный класс оболочки для моей сборки, чтобы код Razor мог получить доступ к этой сборке через эту оболочку; 2) просто добавьте логику сборки к общедоступному классу в той же сборке, где находится код Razor.
источник
Помимо внесения изменений в web.config для
<assemblies>
и<namespaces>
, я обнаружил, что сборка GAC имеет большое значение. Вы можете применить токен культуры и открытого ключа, как любую базовую сборку .NET, зарегистрированную глобально.Некоторые могут вздрогнуть при упоминании GAC. Но как разработчик BizTalk я вырос, чтобы принять это.
источник
Это решение сработало для меня (это забавно, но работает)
Я отредактировал страницы просмотра, скопировал содержимое и вставил в него, я не изменил никакого содержимого представлений, а просто отредактировал, чтобы визуальная студия могла отслеживать страницы, и после этого все начало работать
Решение - просто отредактируйте страницы и замените их такими же (сработало для меня)
источник
в моделях spacename yourClassModel добавьте public перед именем class
источник
В моем случае пакет, который я пытался использовать, ссылался на стандарт .net 2.1, в то время как мой проект библиотеки классов бритвы был установлен на 2.0
источник