Подтвердить что ты не робот

Добавить вид Диспетчер модельного класса, не показывающий мой класс

Ive создал новое интернет-приложение С# asp.net mvc 4.0 (бета), а у меня несколько странное поведение в диалоговом окне "Добавить вид" в Visual Studio 2010 (sp1). Когда я решаю создать строго типизированный вид, в диалоговом окне "Добавить вид" в раскрывающемся списке "Класс модели" не отображается класс ViewModel.

Для записи да, я выполнил компиляцию приложения перед запуском диалогового окна "Добавить вид" .

Я считаю, что я определил проблему, но не знаю, как ее исправить. Ниже приведены этапы воспроизведения, если кто-то хочет воспроизвести поведение:

  • В Visual Studio 2010 (sp1) создайте новый С# asp.net MVC 4.0 (бета) Интернет-приложение.
  • В папке "Модели" создайте новый простой класс, называемый "GazouViewModel.cs"
  • Создайте приложение, откройте HomeController, щелкните правой кнопкой мыши Index() ActionResult и выберите Add View...
  • В диалоговом окне "Добавить вид" установите флажок "строго типизированное представление" и в классе Model: выпадающий список, вы увидите свой "GazouViewModel"

  • В обозревателе решений щелкните правой кнопкой мыши проект и выберите "Управление Пакеты NuGet "
  • Найдите, найдите и установите пакет "Bootstrapper.Autofac".
  • Восстановите приложение и убедитесь, что ваш "GazouViewModel" по-прежнему отображается в диалоговом окне "Добавить вид" .
  • В раскрывающемся списке все еще должно отображаться "GazouViewModel" .

  • В обозревателе решений щелкните правой кнопкой мыши проект и выберите "Управление Пакеты NuGet "
  • Найдите, найдите и установите "Autofac ASP.NET MVC4 (бета-версия) Интеграция ".
  • Восстановите приложение и убедитесь, что ваш "GazouViewModel" по-прежнему отображается в диалоговом окне "Добавить вид" .
  • В раскрывающемся списке все еще должно отображаться "GazouViewModel" .

  • В обозревателе решений щелкните правой кнопкой мыши свой проект и добавьте новый класс (Class1.cs) в любом месте, это не имеет значения.
  • Сделайте этот Class1 реализованным IAutofacRegistration и реализуйте интерфейс.
  • Восстановите приложение и убедитесь, что ваш "GazouViewModel" по-прежнему отображается в диалоговом окне "Добавить вид" .
  • "GazouViewModel" больше не отображается внутри класса модели Выпадающий.

Похоже, что как только я создаю класс, реализующий интерфейс IAutofacRegistration и создаю приложение, Im больше не сможет просматривать мои ViewModels в этом выпадающем списке.

Может ли кто-нибудь подтвердить, получают ли они те же результаты, что и я? И что еще более важно, как это можно исправить?

ВАЖНО. Я пробовал те же самые шаги с приложением mvc 3.0, и произошло то же самое поведение... поэтому это не относится к версии BETA.

С уважением Vince

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: На момент написания этой статьи я больше не могу воспроизвести ошибку. Возможно, пакеты NuGet, которые я использую, были обновлены до более новой версии и случайно исправили ошибку.

Я буду отмечать это сообщение как закрытое.

Спасибо за каждый вклад в это!

Винс

Ответ 2

Если вы получите сообщение об ошибке: "Запуск преобразования: входной файл, по-видимому, использует версию схемы, не поддерживаемую этим шаблоном.Это может привести к ошибкам компиляции. Используйте" Добавить новый сгенерированный элемент ", чтобы добавить обновленный шаблон".

Вы используете EF 5.x. Вы должны добавить метаданные для EF 5.x в свой шаблон T4. В заголовке заголовка файла DefineMetadata()

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#><#

DefineMetadata();

внизу вашего метода создания шаблона

private void DefineMetadata()
{
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_NAME] = "CSharpDbContext.Types";
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_VERSION] = "5.0";
    TemplateMetadata[MetadataConstants.TT_MINIMUM_ENTITY_FRAMEWORK_VERSION] = "5.0";
}

Ответ 3

Я решил эту проблему, безуспешно, как через 2 часа, а затем удалив Assembly.cs из папки "Свойства" в решении. После того, как я сделал пересоздание решения, выпадающее меню "Add-view" smudly smogло найти все мои ViewModels, довольно странно.

Я предполагаю, что версия сборки, определенная в Assembly.cs, каким-то образом перепуталась с фактической версией, используемой в проекте. Во всяком случае, теперь это работает для моего случая.

Ответ 4

Что сработало для меня, так это просто создать решение после создания моей модели. Затем я смог найти свою модель в раскрывающемся списке.

Ответ 5

Я тоже заметил эту проблему (используя MVC 4 Beta на Visual Studio 2010). Повторный запуск Visual Studio решил проблему для меня.

Ответ 6

Просто очистите и создайте свое решение. Это сработало для меня.

Ответ 7

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

В моем случае пространство имен было слишком длинным для отображения в раскрывающемся списке "Модельный класс". Сокращение пространства имен (смехотворная боль сама по себе) снова запустило работу!

Ответ 8

Используя VS 2010 и MVC 3.0, в один момент выпадающее меню класса "Модель представления" не показывало мне никаких классов. Иван предложил перезапустить VS, похоже, работал на меня.

Я попытался удалить AssemblyInfo.cs, сделал "Чистый" и "Восстановить", но это не решило проблему. Когда я перезапустил VS, классы классов вернулись в раскрывающийся список.

Ответ 9

Я понимаю, что это немного устарело. У меня была аналогичная ситуация, когда мои классы не загружались в мастер View Template. Я использую VS 2012 с MVC3. Все остальные в команде были в порядке, просто к счастью, у меня были проблемы. После долгих исследований и попыток многого, единственное, что постоянно фиксировало его, запускает VS в safemode (из командной строки: "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" /безопасный режим). Один из моих расширений должен вызывать проблему, а при запуске в безопасном режиме они не загружаются.