2012-03-12 2 views
22

Я создал новое интернет-приложение C# asp.net mvc 4.0 (бета), и у меня несколько странное поведение в диалоговом окне «Добавить вид» в Visual Studio 2010 (sp1) , Когда я решаю создать строго типизированный вид, в диалоговом окне «Добавить вид» в раскрывающемся списке «Класс модели» не отображается класс ViewModel.Добавить View Model class dropdown, не показывающий мой класс

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

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

  1. В Visual Studio 2010 (sp1), создать новый C# ASP.NET MVC 4.0 (бета) Интернет приложений.
  2. Внутри папки Models, создать новый простой класс под названием « GazouViewModel.cs»
  3. Постройте приложение, откройте HomeController, щелкните правой кнопкой мыши Index() ActionResult и выберите Добавить просмотр ...
  4. В Добавить диалог View, установите флажок «строго типизированных» флажок и в классе Model: выпадающий список, вы заметите, ваш «GazouViewModel»

  1. В обозревателе решений щелкните правой кнопкой мыши ваш проект и выберите «Управление Пакеты NuGet»
  2. Поиск, поиск и установка пакета «Bootstrapper.Autofac».
  3. Перестройте приложение и проверьте, отображается ли ваш «GazouViewModel» внутри диалогового окна «Добавить вид».
  4. «GazouViewModel» все равно должен отображаться в выпадающем меню.

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

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

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

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

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

С уважением Vince

+0

Если кто-то другой может воспроизвести, я буду исследовать. Пинг меня, когда ты получишь подтверждение. – RickAndMSFT

+0

Я могу воспроизвести. VS2010 SP1. Бета-версия MVC4. Чистая установка. Если я прокомментирую реализацию IAutofacRegistration, он внезапно начнет работать. Очень странно. –

+0

То же самое, я испытываю ту же проблему при воспроизведении этих шагов. Я думаю, что это заговор против использования очень мощного модуля Autofac в сочетании с Bootstrapper (или, вероятно, нет, кто знает ^^) –

ответ

1

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

Отметьте это сообщение как закрытое.

Спасибо за вклад каждого на этом!

Vince

9

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

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

+0

Я не пробовал ваше решение просто потому, что больше не могу воспроизвести ошибку, скорее всего, из-за того, что пакеты NuGet были обновлены ... но спасибо, что поделились своими результатами. – Vlince

+4

Просто перестройка отлично работала для меня, не нужно удалять Assembly.cs! –

+0

Это сработало для меня спасибо – user1434177

2

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

0

Используя VS 2010 и MVC 3.0, в один момент выпадающий список Add View Model не показывал мне никаких классов. Представление Иванова о перезапуске ВС, похоже, сработало для меня.

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

14

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

Вы используете 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"; 
} 
+2

Как вы это поняли? +1! : D –

+0

Согласен с Jeroen. это сработало для меня! –

0

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

+0

Попробовал эту попытку, но он отключил строительные леса Entity Framework, которые я использовал для перечисления моделей в первую очередь. Живи и учись. Тем не менее, я ценю подсказку. Я продолжаю забывать, что у VS даже есть безопасный режим. – jsuddsjr

1

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

3

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

+0

для меня Я только что сделал это, но это не сработало Я закрыл vwde и снова открыл его, и это сработало –

1

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

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

+0

Еще одно возможное решение, которое даже работает, когда модель находится в зависимости вместо самого проекта: создайте подкласс (в вашем случае , в более коротком пространстве имен); после создания представления вы можете легко изменить объявление '@ model', чтобы указать родительский класс, и удалить подкласс --- или нет. – jpaugh