Основанное на бритве представление не видит ссылочные сборки - PullRequest
96 голосов
/ 10 февраля 2011

Я пытаюсь создать строго типизированное представление на основе класса из другой сборки.Однако по какой-то причине в моем представлении Razor не видно других сборок, на которые есть ссылки в моем проекте.например,

@model MyClasses.MyModel

приводит к ошибке в Visual Studio 2010: «Не удалось найти тип или имя пространства имен MyClasses (отсутствует директива using или ссылка на сборку?).»

Тот же класс, на который ссылается движок стандартного представления, работает нормально.У меня такая же проблема, когда я пытаюсь сослаться на класс в теле моего представления.

Я что-то упускаю из Razor или мне нужно ссылаться на сборку другим способом?

Ответы [ 18 ]

1 голос
/ 01 августа 2012

Я получал похожую ошибку после перевода моей машины с 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.View web.config ссылается на v1, но приложение ссылается на v2.Удалены ссылочные сборки и повторно добавлен v1.System.Web.WebPages.Razor и т. д.

0 голосов
/ 25 июня 2014

В дополнение к внесению изменений в web.config для <assemblies> и <namespaces>, я обнаружил, что сборка в GAC имеет большое значение.Вы можете применять маркер культуры и открытого ключа, как и любую базовую сборку .NET, зарегистрированную во всем мире.

Некоторые могут содрогнуться при упоминании GAC.Но, как разработчик BizTalk, я вырос, чтобы принять его.

0 голосов
/ 11 августа 2017

Ваше имя FOLDER проекта должно быть таким же.Если ваше имя проекта или решения отличается, MVC вас обидит.

Пример. Если вы создаете новое приложение и оно получает имя по умолчанию Webapplicaiton1, то это пространство имен будет создано.Итак, позвольте нам сказать, что вы не хотите иметь это пространство имен, поэтому из VS вы меняете везде, где вы можете видеть «MyNamespace».Вы также ищете и заменяете весь код из «Webapplication1» и заменяете его на «MyNamespace».Это также изменяет файл web.config, так что он включает

Теперь все будет работать, кроме Razor.

RazorViews не может его найти, потому что существует какая-то странная зависимость от FOLDERNAME проекта.Это ужасный дизайн.

Я проверил это частично, скопировав свои файлы в новое решение, и единственное отличие заключается в следующем имени.

0 голосов
/ 29 июня 2016

Это решение сработало для меня (это смешно, но работает)

Я отредактировал страницы просмотра, скопировал содержимое и вставил в него, я не изменил никакого содержимого просмотров, а просто отредактировал такВизуальная студия могла бы сделать это для отслеживания страниц, и после этого все начало работать

Решение - просто отредактируйте страницы и замените их теми же страницами (Работало для меня)

0 голосов
/ 27 августа 2015

в моделях spacename, yourClassModel, добавьте public перед именем class

public class yourClassModel{
    prop
}
0 голосов
/ 10 февраля 2011

включает все пространство имен

@model namespace.myclasses.mymodel
0 голосов
/ 10 февраля 2011

Попробуйте добавить пространство имен, в котором находится ваш MyClasses, в файл web.config в

<pages> <namespaces></namespaces> </pages>

0 голосов
/ 18 января 2012

Ни один из этих https://stackoverflow.com/a/7597360/808128 не работает для меня.Даже «добавление ссылки на сборку в раздел system.web / compilation / assembly» корневого файла web.config ».Таким образом, у меня остается два пути: 1) добавить общедоступный класс переноса для моей сборки, чтобы код Razor мог получить доступ к этой сборке через этот перенос;2) просто добавьте логику сборки в открытый класс в той же сборке, где расположен код Razor.

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