Как получить шаблон T4 для генерации выходных данных при каждой сборке? Как и сейчас, он восстанавливается только когда я изменяю шаблон.
Я нашел другие вопросы, похожие на это:
Преобразование T4 и порядок сборки в Visual Studio (без ответа)
Как получить файлы t4 для сборки в visual studio? (ответы недостаточно подробны [хотя все еще достаточно сложны] и даже не имеют полного смысла)
Должен быть более простой способ сделать это!
visual-studio
tfs
msbuild
t4
JoelFan
источник
источник
Ответы:
Я использовал ответ Джоэл Фана, чтобы придумать это. Мне это нравится больше, потому что вам не нужно помнить об изменении события перед сборкой каждый раз, когда вы добавляете новый файл .tt в проект.
%PATH%
transform_all ..\..
"transform_all.bat
источник
"%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\texttransform.exe"
) в командный файл, а не добавлять его в% PATH%%COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe
. Оберните это в двойные кавычки.TextTransform.exe
отстой. Вы уже можете щелкнуть правой кнопкой мыши «Запустить пользовательский инструмент» в Visual Studio, поэтому у него уже есть путь к инструменту. Почему я должен снова выполнить работу по его предоставлению при сборке из контекста Visual Studio?Я согласен с GarethJ - в VS2010 гораздо проще восстанавливать шаблоны tt при каждой сборке. Блог Олега Сыча описывает, как это сделать. Коротко:
</Project>
Вот и все. Откройте свой проект. При каждой сборке все * .tt шаблоны будут перерабатываться
источник
msbuild mySolution.sln /p:CustomAfterMicrosoftCommonTargets="C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets" /p:TransformOnBuild=true /p:TransformOutOfDateOnly=false
Существует отличный пакет NuGet, который делает именно это:
Подробности о пакете можно найти здесь
источник
content
действия по сборке<#@ template language="C#" #>
Я использовал ответ MarkGr и разработал это решение. Сначала создайте пакетный файл с именем RunTemplate.bat в отдельной папке инструментов над основной папкой решения. Пакетный файл просто имеет строку:
Этот пакетный файл принимает 2 параметра ... % 1 - это путь к файлу .tt без расширения .tt. % 2 - это путь к любым библиотекам DLL, указанным в шаблоне директивами Assembly .
Далее перейдите в Project Properties проекта, содержащего шаблон T4. Зайдите в Build Events и добавьте следующую командную строку Pre-build event :
заменив MyTemplate именем вашего файла .tt (т.е. MyTemplate.tt) без расширения .tt. Это приведет к расширению шаблона для создания MyTemplate.cs перед сборкой проекта. Тогда фактическая сборка скомпилирует MyTemplate.cs
источник
Недавно нашел этот замечательный плагин VS, Chirpy .
Он не только генерирует ваш T4 при сборке, но и позволяет на основе T4 подходить к минимизации JavaScript, CSS и даже позволяет использовать синтаксис LESS для вашего CSS!
источник
Вероятно, самый простой способ - установить расширение Visual Studio под названием AutoT4 .
Он запускает все шаблоны T4 при сборке автоматически.
источник
Предварительная сборка может быть сведена к одной строке:
Это преобразует все
.tt
файлы в проекте и выводит их в вывод сборки.Если вы не хотите выводить сборку, вам нужно обойти «интересное поведение» :
Конечно, вы можете вытащить это в командный файл, в который вы передаете путь к каталогу проекта, если хотите.
NB Путь может потребовать некоторых настроек. Путь выше - то, где VS 2008 установил это на моей машине; но вы можете обнаружить, что номер версии между
TextTemplating
иTextTransform.exe
отличается.источник
System.Exception: T4MVC can only execute through the Visual Studio host
Проверьте C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ TextTemplate, где есть преобразование командной строки exe. В качестве альтернативы напишите задачу MSBuild с пользовательским хостом и выполните преобразование самостоятельно.
источник
Расширяя ответы Сета Рено и Джоэл Фана , я придумал это. С этим решением не нужно помнить, что нужно изменять событие перед сборкой каждый раз, когда вы добавляете новый файл .tt в проект.
Процедура внедрения
transform_all.bat "$(ProjectDir)" $(ProjectExt)
для каждого проекта с .tt, который вы хотите построитьtransform_all.bat
НОТЫ
При преобразовании текста предполагается, что код в шаблоне T4 соответствует языку вашего типа проекта. Если этот случай не относится к вам, вам придется заменить
$(ProjectExt)
аргумент расширением файлов, которые вы хотите сгенерировать кодом..TT
файлы должны находиться в каталоге проекта, иначе они не будут создаваться. Вы можете создавать файлы TT вне каталога проекта, указав в качестве первого аргумента другой путь ( т. Е. Замените"$(ProjectDir)"
путь, содержащий файлы TT).Не забудьте также указать правильный путь к
transform_all.bat
пакетному файлу.Например, я поместил его в каталог решений, чтобы событие перед сборкой было следующим
"$(SolutionDir)transform_all.bat" "$(ProjectDir)" $(ProjectExt)
источник
t4list.txt
файл в PasteBin, чтобы я попытался выяснить, происходит ли ваша ошибка оттуда?for /f "delims=" %%d in (t4list.txt) do (
корпоративных ограничений, и вы не можете опубликовать свойt4list.txt
файл, то, боюсь, я не смогу вам чем-то помочь. Я действительно хотел помочь решить эту проблему, но похоже, что это будет невозможно, так как у меня нет данных для продолжения. Удачи в устранении проблемы и не забудьте опубликовать свое решение, если вы добились успеха.(this.Host as IServiceProvider).GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
? К сожалению, я получаю исключение нулевой ссылки , когда запускаю tt не из Visual Studio.Если вы используете Visual Studio 2010, вы можете использовать Visual Studio SDK для моделирования и визуализации: http://code.msdn.microsoft.com/vsvmsdk
Он содержит задачи msbuild для выполнения шаблонов T4 во время сборки.
Загляните в блог Олега для более подробного объяснения: http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration
источник
Эй, мой скрипт также может анализировать расширение вывода
Просто создайте
transform_all.bat $(SolutionDir)
событие перед сборкой, и все файлы * .tt в вашем решении будут автоматически преобразованы.источник
Dynamo.AutoTT будет делать то, что вам нужно. Вы можете настроить его для просмотра файлов через регулярные выражения или генерировать при сборке. Это также позволяет вам указать, какие шаблоны T4 вы хотите запускать.
Вы можете скачать его здесь: https://github.com/MartinF/Dynamo.AutoTT
Просто создайте его, скопируйте файлы DLL и AddIn в
C: \ Users \ Documents \ Visual Studio 2012 \ Addins \
и понеслось.
Если вы хотите запустить его в VS2012, вам необходимо изменить файл Dynamo.AutoTT.AddIn и установить для версии значение 11.0 в файле AddIn;
источник
Благодаря GitHub.com/Mono/T4 на данный момент вы можете сделать это для сборок .NET Core и Visual Studio, добавив это в свой
.csproj
файл:Если вы преобразуете свои шаблоны в разные языки программирования, вы должны добавить что-то вроде
<Compile Remove="**\*.vb" />
и<Compile Include="**\*.vb" />
для того, чтобы эти файлы были скомпилированы, даже если у вас еще нет сгенерированных файлов.Remove
иInclude
трюк нужен только для первого поколения, или вы можете сделать XML-короче так:и просто запустите сборку дважды (в первый раз). Если вы уже сгенерировали файлы, зафиксированные в репозитории, проблем с перекомпиляцией в обоих примерах не возникнет.
В Visual Studio вы можете захотеть увидеть что-то вроде этого:
вместо этого:
Так что добавьте что-то подобное в ваш файл проекта:
Полный пример здесь: GitHub.com/Konard/T4GenericsExample (включает в себя создание нескольких файлов из одного шаблона).
источник
Вот мое решение - похоже на принятый ответ. У нас была проблема с нашим контролем версий. Целевые файлы .cs доступны только для чтения, а T4 не работает. Вот код, который запускает T4 во временной папке, сравнивает целевые файлы и копирует его только в случае таких же изменений. Это не решает проблему с файлами read.only, но, по крайней мере, это происходит не очень часто:
Transform.bat
Вы можете попытаться добавить свою команду извлечения в строке (:: Вы можете попробовать ....)
В вашем проекте установите это как предварительное действие:
источник
Вам просто нужно добавить эту команду в событие предварительной сборки проекта:
Проверка конфигурации = отладка гарантирует, что вы не будете заново генерировать код в режиме выпуска, когда вы, например, делаете сборку на сервере сборки TFS.
источник
В Visual Studio 2013 щелкните правой кнопкой мыши шаблон T4 и установите для свойства transform on build значение true.
источник
Вот как я это сделал. Link . Основываясь на отличном блоге (blogs.clariusconsulting.net/kzu/how-to-transform-t4-templates-on-build-without-install-a-visual-studio-sdk/ не может публиковать более 2 ссылки :() Я придумал этот файл .targets для использования с файлами projs для Visual Studio.
Это полезно, когда вы используете другие dll-ы внутри вашего .tt и хотите, чтобы результат менялся по мере изменения dll-ов.
Как это устроено:
Удалить ссылки на сборки из .tt
Внутри файла proj используйте этот код для настройки преобразования при сборке:
Первая часть Находит TextTransform.exe
$(IncludeForTransform)
будет равен,c:\path\to\dll\foo.dll' -r c:\path\to\dll\bar.dll
потому что это способ добавить ссылки для TextTransform в командной строке<_TextTransform Include="$(ProjectDir)**\*.tt" />
это создает список всех файлов tt внутри проекта и подкаталогов<Exec Command="...
создает строку для каждого из найденных .tt файлов, которая выглядит"C:\path\to\Transform.exe" "c:\path\to\my\proj\TransformFile.tt" -r"c:\path\to\foo.dll" -r "c:\path\to\bar.dll"
Осталось только добавить пути к dll внутри:
Здесь
<InProject>False</InProject>
скрываются эти элементы из окна просмотра решенийТак что теперь вы сможете генерировать свой код при сборке и при изменении dll-ов.
Вы можете удалить пользовательский инструмент (из свойств внутри Visual Studio), чтобы VS не пытался каждый раз трансформироваться и терпеть неудачу. Потому что мы удалили ссылки на сборки в шаге 2
источник
T4Executer делает это для VS2019. Вы можете указать шаблоны, которые будут игнорироваться при сборке, и есть опция выполнения после сборки.
источник
Вы просто устанавливаете пакет NuGet: Clarius.TransformOnBuild
Затем, каждый раз, когда вы нажимаете Rebuild project (или Solution), ваши .tt- файлы будут запускаться
источник
В Visual Studio 2017 (возможно, и в следующих версиях) вы должны добавить это в событие Pre-build:
ps Измените путь к вашему шаблону, если он находится не в корневом каталоге проекта.
источник
Какой-то парень создал пакет nuget для этого.
Примечание: я получаю ошибки компиляции как из TextTemplate.exe, так и из этого пакета (потому что этот пакет вызывает TextTemplate.exe), но не из Visual Studio. Итак, по-видимому, поведение не то же самое; Берегись.
РЕДАКТИРОВАТЬ: Это оказалось моей проблемой.
источник
Вот событие перед сборкой, использующее только Microsoft Tooling и стандартные пути. Это проверено в vs2019 / netcore3.1.
Замените «AppDbContext.tt» на путь к файлу, относящемуся к проекту:
У Microsoft также есть руководство, чтобы сделать макросы типа «$ (SolutionDirectory)» доступными в шаблоне, используя T4ParameterValues в файле проекта.
источник