Преобразование T4 и порядок сборки в Visual Studio
У меня есть проект VS, который содержит:
1. Действие Pre-Build для запуска TextTransform на "template.tt" для генерации "сгенерированных .cs"
2. "сгенерированный .cs" указан как один из файлов для компиляции (т.е. В списке файлов проекта
Когда я создаю проект, выполняется предварительная сборка, "generate.cs" воссоздается, но VS компилирует предыдущую версию (что, как я полагаю, он загружался в память в начале процесса сборки).
Что можно сделать, чтобы сборка использовала новый созданный файл cs (который генерируется в действии pre-build?
(обратите внимание, что в моей ситуации вход преобразования текста является динамическим, поэтому не может быть выполнен во время разработки)
Спасибо.
Ответы
Ответ 1
Я не думаю, что вам нужно выполнить предварительную сборку. Просто добавьте файл ".tt" в свой проект и установите для свойства "Custom Tool" значение "TextTemplatingFileGenerator". Возможно, вы захотите убедиться, что файлы *.generated.cs также добавлены в проект, но я думаю, что VS позаботится об этом.
Ответ 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.