Не удается заставить T4MVC работать с VS2010 и ASP.NET MVC 2 - PullRequest
8 голосов
/ 15 декабря 2009

Я пытаюсь добавить шаблоны T4MVC в свой проект, но у меня возникли некоторые проблемы. Я пошел в Codeplex и скачал последнюю версию T4MVC , и в соответствии с инструкциями я просто скопировал два файла T4MVC.tt и T4MVC.Settings.t4 в корень моего веб-приложения.

Сразу же я получил следующие ошибки:

С T4MVC.cs (сгенерированный файл):

Пространство имен не может напрямую содержать элементы, такие как поля или методы

Начиная с T4MVC.tt (шаблон создания кода):

Преобразование компиляции: Не удалось найти имя типа или пространства имен 'ITextTemplatingEngineHost' (отсутствует директива using или ссылка на сборку?)

Когда я открываю T4MVC.cs, он содержит только одну строку:

ErrorGeneratingCode

Я нашел этот пост , который предлагает просто построить снова, но это решение не решает мою проблему - на самом деле, это ничего не меняет. Что мне делать?

Ответы [ 3 ]

18 голосов
/ 15 декабря 2009

ОК, я понял это. Проблема заключалась в том, что, очевидно, со времени последнего выпуска пакета T4MVC Microsoft изменила расположение интерфейса ITextTemplateHost, поэтому мне нужно было импортировать другое пространство имен. Кроме того, файлы .dll с этими пространствами имен не импортируются в шаблонный проект ASP.NET MVC по умолчанию. Вот что я сделал, чтобы это заработало:

  1. Добавить ссылки на следующие DLL-файлы (пути поиска на моем компьютере в скобках):

    • Microsoft. VisualStudio.10.0.dll )

    • Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll ( C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.TextTemplating.Interfaces.10.0 \ v4.0_10.0.0. 0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll )

  2. Убедитесь, что следующие пространства имен импортированы в T4MVC.tt (просто следуйте синтаксису, который уже есть в файле).

    • Microsoft.VisualStudio.TextTemplating

    • Microsoft.VisualStudio.TextTemplating.Interfaces

  3. Удалите все созданные файлы кода (они появятся, если вы развернете T4MVC.tt в Solution Explorer).

  4. Сборка проекта. Если файлы не создаются, откройте T4MVC.tt, отредактируйте что-нибудь, , не сохраняйте и постройте. Это должно сделать это!

3 голосов
/ 14 января 2011

ADDENDUM - ASP.NET MVC 3 RTM

В качестве дополнения к этой проблеме, если вы только что установили ASP.NET MVC 3 RTM, вы можете столкнуться с аналогичными проблемами в проектах, которые были созданы с использованием одного из кандидатов на выпуск MVC 3.

Решить:

Убедитесь, что у вас установлен T4MVC.2.6.40 или более поздней версии с использованием NuGet.

Т.е. переустановите T4MVC, используя Инструменты >> Управление пакетами библиотек. В консоли введите:

uninstall-package t4mvc 

и затем:

install-package t4mvc 

, чтобы получить последнюю версию.

Теперь вы вероятно получите следующую ошибку в файле T4MVC.tt:

A namespace cannot directly contain members such as fields or methods

Откройте файл, сделайте его грязным (например, удалив комментарий с волнистой линией), затем закройте БЕЗ СОХРАНЕНИЯ !!! Смотрите ответ Дэвида Эббо, t4mvc.tt НУЖНО быть грязным!

Перекомпилируй и иди и получи жизнь.

2 голосов
/ 19 декабря 2009

Кажется, у вас все работает, но позвольте мне добавить несколько моментов.

О необходимости импорта Microsoft.VisualStudio.TextTemplating.Interfaces я добавил комментарий об этом в верхней части T4MVC.tt. Но да, это легко пропустить.

Теперь о запутанной части: хотя эти интерфейсы действительно переместились в это другое пространство имен в Beta2, команда T4 изменила мнение и решила перенести их обратно в исходное пространство имен, чтобы избежать путаницы. Поэтому, когда выйдет следующая сборка RC, это пространство имен исчезнет.

По поводу необходимости импорта DLL, я удивлен, что вам это нужно, так как у меня это работает без него.

Заключительное примечание: на шаге 4 должно быть безопасно, если вы сохраните здесь. Что происходит, так это то, что T4MVC имеет логику, которая сохраняет себя грязной, поэтому даже если вы сохраните ее, вы увидите, что она помечена как несохраненная (это можно отключить в файле настроек).

Надеюсь, это поможет!

...