Шаблон T4, добавляющий сборку существующего проекта в решении
Привет. Мне нужно добавить сборку существующего проекта в мое решение в файле T4 Template.
Проблема в том, что мой шаблон T4 находится в проекте Project.WebApi и классе, который мне нужен в моем шаблоне T4, находится внутри проекта под названием Project.Common.WebApi.
Я попытался импортировать пространство имен следующим образом:
<#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #>
Но я получаю эту ошибку:
The type or namespace name 'Project' could not be found (are you missing a using directive or an assembly reference?)
Я попытался добавить сборку следующим образом:
<#@ assembly name="Project.Common.WebApi" #>
И я получил эту ошибку:
Compiling transformation: Metadata file 'Project.Common.WebApi' could not be found
В моем проекте, который содержит T4Template (Project.WebApi), есть ссылка на Project.Common.WebApi, но из того, что я прочитал, T4Template не использует ссылки в проектах.
Как я могу решить эти проблемы?
Ответы
Ответ 1
T4 работает почти полностью независимо от остальной части вашего кода. Вы на правильном пути, но с директивой assembly
, но вам нужно указать полный путь к фактической DLL сборки, если только сборка не находится в GAC (чего, вероятно, нет).
К счастью, вы можете использовать макросы MSBuild в директивах T4. Итак, вы, вероятно, получите что-то вроде
<#@ assembly name="$(SolutionDir)Project.Common.WebApi\bin\Debug\Project.Common.WebApi.dll" #>
Подробнее о синтаксисе см. MSDN.
Вам также нужна директива import namespace
.
Наконец, будьте осторожны с порядком построения проекта. Проект, который содержит ваш шаблон T4, теперь зависит от Project.Common.WebApi, поэтому вам нужно сначала убедиться, что Project.Common.WebApi создан. В противном случае ваш шаблон T4 может случайно ссылаться на более старую версию сборки, что затрудняет отслеживание ошибок.
Если у вас уже есть ссылка на проект, вы все сделали, но в противном случае вам нужно правильно настроить зависимости. Вы можете сделать это в Visual Studio через диалог "Зависимости проектов...". Щелкните правой кнопкой мыши проект, чтобы найти его.
Ответ 2
Если ваш проект с шаблоном T4 имеет прямую ссылку на проект, вы можете использовать $(TargetDir)
< # @assembly name= "$ (TargetDir) Project.Common.WebApi.dll" # >
Ответ 3
<#@ assembly name="$(TargetPath)" #>
Проще всего.
Ответ 4
На всякий случай вы использовали С#
Я думаю, это будет:
<#@ assembly name="$(SolutionDir)Project.Common.WebApi\\bin\\Debug\\Project.Common.WebApi.dll" #>
Используйте двойную косую черту.