T4MVC, похоже, теряет уже сгенерированный код - PullRequest
3 голосов
/ 03 сентября 2010

У меня проблема с тем, что T4MVC теряет код, сгенерированный при каждом обновлении SVN.Я могу это исправить, удалив файлы .generated.cs и повторно запустив шаблон.Но это оказывается немного утомительным.Что-то мне не хватает?


Сначала небольшая справочная информация ...

Я использую C # v4, VS2010 и ASP.NET MVC2.Я использую Subversion для контроля версий.Я также использую ряд надстроек и расширений в VS2010 ...

  • Huagati DBML.EDMX Tools
  • Zippy.Chirp (для автоматического запуска шаблона T4MVC)
  • Resharper v5
  • Визуальный SVN
  • Выравнивание назначений
  • Веб-сайт ASP.NET OpenID
  • Brace Completer (отключено)
  • Code4Blog
  • devColor
  • Выделение всех вхождений выбранного слова (отключено)
  • Проверка правописания HTML (отключено)
  • Lipsum 2010 - Lorem Ipsum Generator
  • PowerCommands для Visual Studio 2010
  • Инструменты повышения производительности
  • Проверка орфографии (отключена)
  • Настройка фона Visual Studio
  • Редактор цветовых тем Visual Studio
  • VS10x Code Marker
  • World of VS Default Browser Switcher

На самом деле я пишу этот вопрос как обновление своей рабочей копии и собираю то, что могуна каждом этапе ...

Шаг 1

У меня естьоткрыл мою среду IDE, чтобы начать работу в течение дня, и у меня уже есть 4 предупреждения компилятора, прежде чем я даже обновил свою рабочую копию ...

Warning 1 The C# 2.0 and C# 3.5 compilers are no longer supported. Templates will always be compiled with the version 4 compiler instead of 'v3.5' as specified. C:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 18 4  
Warning 2 Compiling transformation: Unreachable code detected c:\Users\antony\AppData\Local\Temp\z04plrve.0.cs 1015 17  
Warning 3 Compiling transformation: Assuming assembly reference 'EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' matches 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a', you may need to supply runtime policy C:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 1 1  
Warning 4 Compiling transformation: Unreachable expression code detected c:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 968 33

Шаг 2

Сейчас я обновляю свою рабочую копию, щелкнув правой кнопкой мыши по корневому узлу в обозревателе решений и выбрав Обновить в части визуального SVN контекстного меню.

У меня есть деревоконфликтует с большинством моих файлов .generated.cs ...

  • HomeController.generated.cs (конфликт дерева)
  • T4MVC.cs (конфликт дерева)
  • T4MVC.ExplicitExtensions.cs (удалено, добавлено)
  • GoodsInController.generated.cs (конфликт деревьев)
  • SharedController.generated.cs (удалено, добавлено)
  • StockListController.generated.cs (конфликт дерева)
  • StockCheckController.generated.cs (конфликт дерева)
  • AuthController.generated.cs (конфликт дерева)
  • GoodsOutController.generated.cs (конфликт дерева)

Шаг 3

Я сейчас разрешеннг мои конфликты.Я подозреваю, что именно в этом и заключается проблема, поскольку я всегда сохраняю свой локальный файл и отмечаю его как решенный.Я только что сделал это для первого конфликта (HomeController.generated.cs).Затем я попытался сравнить с моей локальной копией и получил следующее сообщение об ошибке ...

Невозможно найти местоположение хранилища для 'C: / Файлы данных / Проекты / Web / ByBox.Vanventory / ByBox.Vanventory /HomeController.generated.cs 'в редакции 14638


WOAH - ДЕРЖИТЕ ТАМ!

Я дошел до этого сегодня, когда понял причинуконфликт дерева заключается в том, что сгенерированные файлы фактически удаляются и повторно добавляются в проект.Теперь я не знаю, делает ли это сам T4MVC или расширение Chirpy.Я просмотрел исходный код Chirpy (просто просматривал в своем веб-браузере на codeplex), и, похоже, он этого не делает.

Я думаю, причина Tree Conflicts В Subversion есть два человека, которые вносят изменения в контроллеры, в результате чего мы оба генерируем новые файлы с одинаковыми именами файлов.Следовательно, в Subversion есть 2 новых файла, которые помечаются как Tree Conflict , потому что он не знает, что с этим делать.

Я подтвердил коллеге, который также использует T4MVC, что у него нет проблем с ним, но они являются единственным человеком, который вносит изменения в код контроллера.До того, как в моем проекте было два человека, у меня никогда не было проблем.Эта проблема появилась после того, как второй человек начал работать над проектом и вносить изменения в код контроллера.


Итак, я упускаю что-то явно очевидное или злоупотребляю T4MVC и / или Chirpy?

На данный момент у меня есть немного хакерского решения.Я написал скрипт powershell, чтобы «дотронуться» до всех файлов controller.cs.Я поместил это в мои Внешние инструменты в VS2010.Когда у меня возникает проблема, я запускаю этот скрипт powershell, а затем создаю программное обеспечение, которое заставляет работать шаблон T4MVC, и все мои ошибки исчезают.Это не идеально, и я бы хотел, чтобы он «просто работал».


Редактировать

Чтобы прояснить ситуацию, в которую я хотел бы попасть, я могучтобы просто открыть Visual Studio по утрам, выполнить обновление SVN (через VisualSVN) и не тратить время на его сборку, потому что код отсутствует в сгенерированных файлах, которые были там вчера.

Итак, как именно работает шаблон / T4MVC в Visual Studio?

(Если он удаляет сгенерированные файлы и воссоздает их каждый раз при запуске, тогда у меня будетпрекратить его использование, так как это просто не подходит для использования subversion и для множества людей, работающих над кодом, к которому добавляется сгенерированный код)

Ответы [ 3 ]

1 голос
/ 08 октября 2010

Я отключил функцию "умного запуска" chirpy, и теперь все в порядке.Я бы предпочел не запускать его вручную в тех редких случаях, когда мне это нужно.Он все еще работает, когда я строю, и это удовлетворяет 99% моих потребностей.

1 голос
/ 03 сентября 2010

Я не думаю, что Chirpy или T4MVC виноваты напрямую.Я думаю, что корень проблемы - T4 из-за способа, которым Visual Studio обрабатывает генерацию кода.

Недавно я видел похожую проблему, например, при обновлении ссылки на службу.Состояние Subversion для сгенерированных файлов было заменено для некоторых сгенерированных файлов.Это означает, что Visual Studio (через надстройку интеграции Subversion) сказал Subversion удалить файл, а затем добавить файл с точно таким же именем.

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

0 голосов
/ 14 сентября 2012

Я знаю, что это старый вопрос, но у нас есть похожие проблемы. Я думаю, что виноват VisualSVN. Я использую ANKH в Visual Studio только для того, чтобы позволить ему добавлять файлы в SVN, когда я добавляю их через Visual Studio. Из того, что я могу вспомнить, я никогда не видел, чтобы TortioseSVN хотел удалить определенный файл T4MVC, который всегда удаляется из репозитория.

Все остальные используют VisualSVN. Я не уверен, но это единственное, что я могу думать о том, что происходит.

...