Продукт трансформации T4 во время сборки используется только в следующей сборке

У меня есть проект VS, который содержит:

  1. предварительное действие TextTransform на template.tt чтобы генерировать generated.cs

  2. generated.cs указан как один из файлов для компиляции (т.е. в списке файлов проекта)

Когда я собираю проект, выполняется действие перед сборкой, generated.cs воссоздается, но VS компилирует предыдущую версию generated.cs (который, я думаю, загружается в память при запуске процесса сборки).

Как заставить сборку использовать новую версию generated.cs (то есть тот, который сгенерирован в действии перед сборкой)? Как форсировать порядок сборки?

Обратите внимание, что ввод текста преобразования является динамическим и, следовательно, не может быть сделано во время разработки.

2 ответа

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

Вот источник: https://web.archive.org/web/20140116193428/http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration/

По сути, вы просто включаете цели сборки T4 в файл проекта и устанавливаете для свойства TransformOnBuild значение true.

Вот соответствующая выдержка:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <PropertyGroup>
    <TransformOnBuild>true</TransformOnBuild>
  </PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />

Обратите внимание, что файл Microsoft.TextTemplating.targets должен быть включен ПОСЛЕ Microsoft.CSharp.targets.

Я не думаю, что вам нужно специальное действие перед сборкой. Просто добавьте файл ".tt" в свой проект и установите для его свойства "Custom Tool" значение "TextTemplatingFileGenerator". Возможно, вы захотите убедиться, что файлы *.generated.cs также добавлены в проект, но я думаю, что VS позаботится об этом.

Другие вопросы по тегам