Продукт трансформации T4 во время сборки используется только в следующей сборке
У меня есть проект VS, который содержит:
предварительное действие
TextTransform
наtemplate.tt
чтобы генерироватьgenerated.cs
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 позаботится об этом.