Преобразование 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.