Добавить вид Диспетчер модельного класса, не показывающий мой класс
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
Ответы
Ответ 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" /безопасный режим). Один из моих расширений должен вызывать проблему, а при запуске в безопасном режиме они не загружаются.