Создание кода в процессе построения

Можно вызывать преобразование текста в процессе построения решения Visual Studio.С помощью этой функции можно обеспечить актуальность файлов, созданных из шаблонов, перед компиляцией.Это позволяет избежать ситуации, когда пользователь забывает щелкнуть Преобразовать все шаблоны перед построением проекта или возвратом кода.Задачи по преобразованию текста могут выполняться Visual Studio или MSBuild и на сервере построений.

Включение задач преобразования текста в файлы проекта

Ee847423.collapse_all(ru-ru,VS.110).gifУстановка пакета SDK визуализации и моделирования

Чтобы иметь возможность выполнять задачи построения на компьютере разработки, установите Пакет Visual Studio Visualization and Modeling SDK.

Сведения о включении задач построения на сервере построений см. в разделе Преобразование текста на сервере построений.

Ee847423.collapse_all(ru-ru,VS.110).gifИзменение файла проекта

Чтобы инициировать преобразование текста, необходимо внести изменения в файл, определяющий проект.Эти свойства нельзя изменить в редакторе свойств проекта.Поэтому необходимо закрыть проект и отредактировать его как текстовый файл.

Редактирование текста файла проекта

  1. В обозревателе решений щелкните правой кнопкой мыши проект и выберите команду Отменить загрузку проекта.

  2. Еще раз щелкните проект правой кнопкой мыши и выберите команду Правка проект.

    Текст файла проекта отобразится в редакторе XML.

Повторное открытие проекта по завершении редактирования

  1. Закройте редактор XML.

  2. В обозревателе решений щелкните правой кнопкой мыши проект и выберите команду Перезагрузить проект.

Ee847423.collapse_all(ru-ru,VS.110).gifИмпорт целевых объектов преобразования текста

Задачи построения текстового преобразования определяются в одном файле.Необходимо импортировать его после стандартных целевых объектов C# или Visual Basic.

Импорт целевых объектов преобразования текста

  1. Отыщите в файле строку, подобную одной из приведенных ниже строк:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

    - или -

    <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />

  2. После этой строки вставьте директиву импорта текстового шаблона:

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

Ee847423.collapse_all(ru-ru,VS.110).gifУстановка свойств для управления выполнением построения

Вставьте в файл проекта следующий текст.Просмотрите следующие разделы на предмет наличия других свойств, которые можно вставить в эту группу свойств.

<PropertyGroup>
 <TransformOnBuild>true</TransformOnBuild>
 <!-- Other properties can be inserted here -->
</PropertyGroup>

TransformOnBuild инициирует выполнение всех шаблонов проекта при построении проекта.

Ee847423.collapse_all(ru-ru,VS.110).gifЗапуск преобразования

Ee847423.collapse_all(ru-ru,VS.110).gifПреобразование всех шаблонов при построении проекта

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

<TransformOnBuild>true</TransformOnBuild>

Преобразование можно инициировать нажатием клавиши F5 в Visual Studio или с помощью MSBuild.Примеры.

msbuild myproject.csproj

Если опустить свойство TransformOnBuild или установить его равным false, шаблоны будут преобразовываться автоматически в процессе построения проекта.

Ee847423.collapse_all(ru-ru,VS.110).gifДобавление ссылочных путей

Набор путей, по которым основное приложение ищет сборки, на которые имеются ссылки в шаблонах, можно пополнять.Примеры.

<ItemGroup>
    <!-- Add VS\...\PublicAssemblies to the list of places
         to look for assemblies used by templates. -->
    <T4ReferencePath Include="$(VsIdePath)PublicAssemblies\" />
</ItemGroup>

Ee847423.collapse_all(ru-ru,VS.110).gifПреобразование определенных шаблонов

Можно преобразовать заданные файлы. вызвав задачу Transform с помощью служебной программы msbuild.Эта задача не зависит от свойства TransformOnBuild и не компилирует файлы проекта.Необходимо импортировать целевой файл текстового шаблона, как описано в предыдущем разделе.

Например, для преобразования определенного файла:

msbuild myproj.proj /t:Transform /p:TransformFile=MyTemplate.tt

Параметр TransformFile может содержать подстановочные знаки.Например, такая команда преобразует все файлы с расширением tt, имеющиеся в папке GeneratedCode:

msbuild dsl.csproj /t:Transform /p:TransformFile="GeneratedCode\**\*.tt"

Ee847423.collapse_all(ru-ru,VS.110).gifИнкрементное построение

По умолчанию диспетчер построений пытается избежать выполнения шаблона, если его выходной файл актуален.Для этого он осуществляет мониторинг файловой системы, отслеживая, какие файлы считываются кодом шаблона.Впоследствии он сравнивает даты изменения этих файлов с датой выходного файла.Он выполняет шаблон, если какой-либо из выходных файлов изменен позднее, чем этот выходной файл.Также шаблон выполняется в случае, если информация о предыдущих выполнениях этого шаблона отсутствует.

В результате выходной файл будет заново создан, если он старше, чем любой из следующих файлов:

  • файл текстового шаблона;

  • файлы, заданные в директивах <#@include#>;

  • файлы, прочитанные кодом данного шаблона;

  • файлы, включенные или прочитанные процессором директив, который используется в данном шаблоне.

Если требуется гарантировать выполнение всех шаблонов при каждом построении, вставьте такое свойство:

<TransformOutOfDateOnly>false</TransformOutOfDateOnly>

Ee847423.collapse_all(ru-ru,VS.110).gifСистема управления версиями

Не существует специальной встроенной интеграции с системой управления версиями.Однако можно добавить собственные расширения, например, для извлечения и возврата сгенерированного файла.

По умолчанию задача преобразования текста избегает перезаписи файла, помеченного как доступный только для чтения, и если такой файл встречается, в список ошибок Visual Studio записывается информация об ошибке и выполнение задачи завершается неудачей.

Чтобы указать, что доступные только для чтения файлы следует перезаписывать, вставьте такое свойство:

<OverwriteReadOnlyOuputFiles>true</OverwriteReadOnlyOuputFiles>

Если не настроить шаг постобработки, при перезаписи файла в список ошибок будет записываться информация об ошибке.

Ee847423.collapse_all(ru-ru,VS.110).gifНастройка процесса построения

Можно настроить процесс построения, например, для извлечения файлов, которые были перезаписаны.Предоставляются две точки настройки, вызываемые до и после преобразования.

Чтобы определить эти точки, определите свойства $(BeforeTransform) и $(AfterTransform).

Примеры.

<PropertyGroup>
    <BeforeTransform>CustomPreTransform</BeforeTransform>
    <AfterTransform>CustomPostTransform;$(AfterTransform)</AfterTransform>
  </PropertyGroup>
  <Target Name="CustomPreTransform">
    <Message Text="In CustomPreTransform..." Importance="High" />
  </Target>
  <Target Name="CustomPostTransform">
    <Message Text="In CustomPostTransform..." Importance="High" />
  </Target>

В AfterTransform можно ссылаться на следующие списки:

  • GeneratedFiles – список файлов, сгенерированных данным процессом.Для тех файлов, которые перезаписывают имеющиеся доступные только для чтения файлы, свойство %(GeneratedFiles.ReadOnlyFileOverwritten) будет иметь значение true.Эти файлы можно извлекать из системы управления версиями.

  • NonGeneratedFiles – список доступных только для чтения файлов, которые не были перезаписаны.

Используя эти списки, вы можете, например, извлекать перезаписанные файлы.

Преобразование текста на сервере построений

Если сервер построений запущен на компьютере, на котором не установлена система Visual Studio, необходимо копировать следующие файлы на компьютер построения с компьютера, на котором установлен пакет SDK для Visual Studio:

  • \Program Files\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies\v4.0\

    • Microsoft.VisualStudio.TextTemplating.11.0.dll

    • Microsoft.VisualStudio.TextTemplating.Interfaces.11.0.dll

    • Microsoft.VisualStudio.TextTemplating.VSHost.11.0.dll

  • \ Program files \ msbuild \ microsoft \ VisualStudio \ TextTemplating \ v11.0 \

    • Microsoft.VisualStudio.TextTemplating.Sdk.Host.11.0.dll
  • \Program Files\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies\

    • Microsoft.VisualStudio.TextTemplating.Modeling.11.0.dll

Дополнительные сведения см. в разделе Развертывание и настройка контроллера построения.

См. также

Другие ресурсы

Visual Studio Visualization and Modeling SDK