Исключение вложенных объектов от управления исходным кодом

Я использую шаблонную обработку T4 для генерации некоторых .config файлов в проекте, я продолжаю работать.

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

Однако у меня теперь есть ошибки "Доступа запрещен", потому что (например), когда это пытается выполнить TextTransform в сети. Файл UAT.tt, сеть. Файл UAT.Config является объектом управления исходным кодом в TFS, и таким образом защищенный от записи.

Обычно я выбирал бы.Config файл в Visual Studio и делал бы Файл->, Управление исходным кодом-> Исключает Из вещи Управления исходным кодом. К сожалению, это не появляется как опция ни для какого файла, который обнаруживается, как "вложено" под другим файлом!

т.е. Я могу исключить web.tt, но не web.config... Я могу исключить default.aspx, но не default.aspx.cs.

У кого-либо есть какие-либо идеи о том, как я могу исключить вложенные файлы более низкого уровня из Управления исходным кодом, но сохранять высокоуровневые?

Спасибо!

6
задан NeilD 6 July 2010 в 09:06
поделиться

2 ответа

Я предполагаю, что здесь вы используете TFS.

Вы не сможете сделать это идеально - так как Visual Studio автоматически добавляет любой новый элемент, добавленный в проект, в контроль исходного кода. Лучшим решением будет использование MSBuild и создание checkout для выходного файла перед запуском шаблона (но тогда вам, скорее всего, придется снова выполнить check-in после этого). Если быстро посмотреть, то есть http://msbuildextensionpack.codeplex.com/, который, как я видел, упоминается для этих целей.

Если это не удается, есть другой способ.

  • Удалите из source-control выходной .config файл и проверьте его (лучше всего использовать для этого Source Control Explorer).
  • Запустите .tt вручную из VS, он снова добавит файл - теперь рядом с ним должен быть знак плюс.
  • Снова в проводнике Source Control Explorer щелкните правой кнопкой мыши на этом "новом" файле и выберите "Undo Pending Changes". Теперь у вас есть файл на диске, но не в системе управления исходным кодом.
  • Теперь TT может быть запущен, файл является частью проекта (и поэтому будет опубликован или что-то еще), но он не находится под контролем исходного кода.

Проблема в том, что если кто-то другой загрузит проект в первый раз, его Visual Studio автоматически создаст выходной файл, если он запустит .TT - в этом случае ему придется либо повторить этот процесс (начиная с шага 2), либо вручную создать файл-заглушку .config с правильным именем (я бы предложил еще до загрузки проекта), чтобы проект увидел его и не пытался повторно контролировать исходный код.

2
ответ дан 17 December 2019 в 07:00
поделиться

Хорошо ... Я использовал адаптированную версию ответа Андраса Золтана.

По сути, я закончил следующим образом:

  1. Щелкните файл .tt в Visual Studio и измените строку «Custom Tool» в свойствах, чтобы она была пустой. Это приведет к удалению файла .config из Решения.
  2. Добавьте в решение новый пустой элемент, называемый независимо от того, каким должен быть выходной файл для .tt (например, Web.UAT.tt -> Web.UAT.config).
  3. Выберите только что добавленный файл и как обычно исключите его из системы контроля версий (Файл -> Контроль версий -> Исключить).

Теперь, когда вы строите, вы должны видеть вновь сгенерированные файлы в Решении, но без какой-либо проверки на входе или выходе.

У этого метода есть пара недостатков. Во-первых, вам нужно сделать это для каждого файла .tt в проекте и убедиться, что другие разработчики делают то же самое. Во-вторых, теперь вы можете только сгенерировать выходные файлы, выполнив сборку!

Я думаю, что в долгосрочной перспективе я, вероятно, воспользуюсь советом Андраса и напишу какой-нибудь сценарий MSBuild, чтобы либо проверять и проверять выходные файлы, либо, по крайней мере, удалять флаг «Только для чтения» с помощью .

Спасибо!

2
ответ дан 17 December 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: