Шаблон 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 не использует ссылки в проектах.

Как я могу решить эти проблемы?

4 ответа

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 через диалог "Зависимости проектов...". Щелкните правой кнопкой мыши проект, чтобы найти его.


Если ваш проект с шаблоном T4 имеет прямую ссылку на проект, вы можете использовать $(TargetDir)

< # @assembly name="$ (TargetDir) Project.Common.WebApi.dll" #>


<#@ assembly name="$(TargetPath)" #>

Проще всего.


На всякий случай вы использовали С#

Я думаю, это будет:

<#@ assembly name="$(SolutionDir)Project.Common.WebApi\\bin\\Debug\\Project.Common.WebApi.dll" #>

Используйте двойную косую черту.

licensed under cc by-sa 3.0 with attribution.