2017-02-03 18 views
0

Одним из моих первоначальных требований к движку шаблонов является то, что я могу хранить «исходные» файлы шаблонов (в случае файлов .tt) «снаружи» библиотеки, выполняющей/преобразование их с целью, позволяющей разработчику, использующему указанную библиотеку, при необходимости внести небольшие корректировки в шаблоны в зависимости от требований того, что им нужно создать.T4 Запустите или скомпилируйте файлы tt во время выполнения в C#

Библиотека написана на C#, и до сих пор единственным способом, с помощью которого я смог заставить их работать, является использование по умолчанию «предварительно скомпилированного» класса C#, автоматически создаваемого для каждого шаблона с помощью Visual Studio. У меня был некоторый успех с использованием приложения TextTransform.exe, чтобы преобразовать файл .tt прямо в его предполагаемый вывод, но это кажется грубым по сравнению с более родным в кодовом подходе.

Итак, что я прошу сделать разумным или я выбрал неправильный шаблон, чтобы использовать его для моих нужд? Любая помощь приветствуется.

ответ

0

Имейте точно такую ​​же ситуацию - набор шаблонов T4 вне основного проекта. Но это немного сложнее - у меня есть несколько шаблонов T4, сгенерированных на лету.

я попробовать следующие варианты:

  • партии (с наполовину ручными сценариями) компиляциями T4 в CS и CS к DLL;
  • боковая рутина, которая сканирует заданную директорию для шаблона T4 и создает * .csproj & * .sln для каталога;
  • с использованием Visual Studio для управления и сборки DLL с помощью шаблонов T4.

Все эти работы прекрасны, но в настоящее время я переключаюсь на последний.

Существует причина:

  • я отладка шаблоны T4 в Visual Studio в обычном режиме.
  • У меня (с использованием T4Toolbox) выделен синтаксис T4.
  • Я могу легко управлять временем компиляции.

Чтобы получить все шаблоны в проекте перекомпилировать до основной сборки требуется только 5 строк, которые будут добавлены в конец * .csproj файла:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets" /> 

<PropertyGroup> 
<TransformOnBuild>true</TransformOnBuild> 
<TransformOutOfDateOnly>false</TransformOutOfDateOnly> 
</PropertyGroup> 

Это все.

После этого вы храните свои «сырые» шаблоны там, где они вам нужны, организуйте их как обычные элементы в проекте типа DLL и имеете фактическую копию на каждой сборке.

P.S. Фактическое означает, что, если кто-то изменит их за пределами Visual Studio (например, в «Блокноте»), вы все их перекомпилируете. Это управляется TransformOutOfDateOnly.

P.P.S. У вас есть одна проблема: нельзя правильно заменить CustomToolNamespace.

+0

Благодарим за отзыв. Я интерпретирую ваш ответ (пожалуйста, поправьте меня, если я ошибаюсь), что означает, что всю DLL необходимо перекомпилировать для учета любых изменений в файлах «tt».Я надеялся, что смогу создать что-то вроде пакета Nuget, где вы получите DLL, содержащую некоторые классы, включая класс «шаблонный трансформатор», который будет вызываться для создания выходных файлов и будет включать в себя файлы tt, используемые для основы преобразования. Затем при запуске DLL будет обрабатывать все, что нужно для выполнения текстовых преобразований, используя файл T4. Вам это кажется возможным? – Thermonuclear

+0

В представленном решении каждый tt-файл будет преобразован из tt в cs/vb, и результат этого и любые дополнительные файлы (* .cs/* vb, * .resx и т. Д.) Будут скомпилированы в одну DLL. – Murr

+0

В представленном решении каждый tt-файл будет преобразован из tt в cs/vb, и результат этого и любые дополнительные файлы (* .cs/* vb, * .resx и т. Д.) Будут скомпилированы в одну DLL. Если вы хотите перекомпилировать только шаблоны - вы можете разделить проект на два - просто шаблоны, а остальные. Таким образом вы сможете обновить любой шаблон и перекомпилировать их в простой * .bat с помощью MsBuild. Но для этого требуется почти полная Visual Studio в системе. – Murr

 Смежные вопросы

  • Нет связанных вопросов^_^