Заставьте Visual Studio выполнять Шаблон T4 на каждой сборке

Я пытаюсь использовать парадигму MVC при выполнении ASP/PHP. Это делает вещи самыми легкими поддержать, повторно спроектировать, подробно остановиться. В том отношении я склонен иметь страницу, которая представляет модель. Это - главным образом VB/PHP и устанавливает Вар для более позднего использования в представлении. Это также генерирует скрягу HTML когда цикличное выполнение для более позднего включения в представление. Тогда у меня есть страница, которая представляет представление. Это - главным образом HTML, наперченный < % = %> теги. Модель является #include-d в представлении, и далеко Вы идете. Логика контроллера обычно делается в JavaScript на третьей странице или серверной стороне.

159
задан abatishchev 12 December 2017 в 22:58
поделиться

6 ответов

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

  • добавьте TextTransform.exe в свой % PATH%
  • создал пакетный файл с именем transform_all.bat (см. Ниже)
  • создайте событие перед сборкой " transform_all .. \ .. "

transform_all.bat

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

:: set the working dir (default to current dir)
set wdir=%cd%
if not (%1)==() set wdir=%1

:: set the file extension (default to vb)
set extension=vb
if not (%2)==() set extension=%2

echo executing transform_all from %wdir%
:: create a list of all the T4 templates in the working dir
dir %wdir%\*.tt /b /s > t4list.txt

echo the following T4 templates will be transformed:
type t4list.txt

:: transform all the templates
for /f %%d in (t4list.txt) do (
set file_name=%%d
set file_name=!file_name:~0,-3!.%extension%
echo:  \--^> !file_name!    
TextTransform.exe -out !file_name! %%d
)

echo transformation complete
68
ответ дан 23 November 2019 в 21:37
поделиться

Оформить заказ C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ TextTemplating там есть командная строка преобразования exe. В качестве альтернативы можно написать задачу MSBuild с настраиваемым хостом и выполнить преобразование самостоятельно.

9
ответ дан 23 November 2019 в 21:37
поделиться

Я использовал ответ MarkGr и разработал это решение. Сначала создайте пакетный файл с именем RunTemplate.bat в отдельной папке tools над основной папкой решения. В командном файле просто есть строка:

"%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\texttransform.exe" -out %1.cs -P %2 -P "%ProgramFiles%\Reference Assemblies\Microsoft\Framework\v3.5" %1.tt

Этот командный файл принимает 2 параметра ... % 1 - это путь к файлу .tt без расширения .tt. % 2 - это путь ко всем библиотекам DLL, на которые ссылаются директивы Assembly в шаблоне.

Затем перейдите в свойства проекта, содержащего шаблон T4. Перейдите в Build Events и добавьте следующую командную строку Pre-build event :

$(SolutionDir)..\..\tools\RunTemplate.bat $(ProjectDir)MyTemplate $(OutDir)

заменив MyTemplate именем вашего .tt-файла (например, MyTemplate.tt ) без расширения .tt. Это приведет к расширению шаблона для создания MyTemplate.cs перед сборкой проекта. Затем фактическая сборка будет компилировать MyTemplate.cs

20
ответ дан 23 November 2019 в 21:37
поделиться

Если вы используете Visual Studio 2010, вы можете использовать Visual Studio Modeling and Visualization SDK: http://code.msdn.microsoft.com/vsvmsdk

Здесь содержатся задания msbuild для выполнения шаблонов T4 во время сборки.

Загляните в блог Олега для более подробного объяснения: http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration

6
ответ дан 23 November 2019 в 21:37
поделиться

Я согласен с GarethJ - в VS2010 гораздо проще регенерировать шаблоны tt на каждой сборке. В блоге Олега Сыча описано, как это сделать. Вкратце:

  1. Установить Visual Studio SDK
  2. Установить Visual Studio 2010 Modeling and Visualization SDK
  3. Откройте в текстовом редакторе файл проекта и добавьте в конец файла, но до

Вот и все. Откройте ваш проект. При каждой сборке все шаблоны *.tt будут перерабатываться

<!-- This line could already present in file. If it is so just skip it  -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- process *.tt templates on each build  -->
<PropertyGroup>
    <TransformOnBuild>true</TransformOnBuild>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />
69
ответ дан 23 November 2019 в 21:37
поделиться

Недавно нашел этот замечательный плагин VS, Chirpy .

Он не только генерирует ваш T4 при сборке, но и позволяет использовать основанный на T4 подход к минификации javascript, CSS и даже позволяет вам использовать МЕНЬШЕ синтаксиса для вашего CSS!

14
ответ дан 23 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

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