Ссылка на сборку в шаблоне T4 - PullRequest
15 голосов
/ 14 июля 2010

Прошло много времени с тех пор, как я последний раз использовал T4, и это, вероятно, глупый вопрос ...

Можно ли ссылаться на произвольную сборку из шаблона?

Пример:

  • У меня есть класс, который я хотел бы использовать в Project X
  • Project X.Test ссылается на X и содержит файл .tt

Я полагаю, что следующее должно работать

<#@ assembly name="X" #>

Но при сохранении я получаю следующую ошибку:

Компиляция преобразования: метаданные файл 'X' не найден

Что я делаю не так?

(Если кому-то интересно: я пытаюсь автоматически генерировать тесты определенного типа на основе метаданных, которые я получаю из X)

Обновление: похоже, VS2010 нарушил поведение разрешения сборки, которое я ожидал. От http://blogs.msdn.com/b/garethj/archive/2010/04/15/what-s-new-in-t4-in-visual-studio-2010.aspx:

Комплект сборки T4 полностью отделен от содержащего сборка проекта, чтобы избежать поднимая неправильные сборки, когда проект нацелен на предыдущие рамки версии. Сборок проекта нет больше используется для разрешения шаблона директивы по сборке.

Есть ли обходные пути, кроме использования абсолютных путей?

Ответы [ 3 ]

25 голосов
/ 14 июля 2010

Вы можете использовать макропеременные VS, такие как $ (SolutionDir) в качестве ссылки на VS2010, например,

<#@ assembly name="$(SolutionDir)\Project1\bin\debug\Foo.dll" #>
1 голос
/ 11 января 2011

Вы также можете проверить здесь на SO: Не может ссылаться на сборку в шаблоне T4

0 голосов
/ 02 апреля 2015

@ GarethJ дает хороший ответ, но для всех методов ссылки на сборку из шаблона T4 попробуйте следующее: Ошибка шаблона T4 - Директива сборки не может найти ссылочную сборку в проекте Visual Studio 2010 .

И если вам нравится решение для макросов VS, вы можете найти их здесь: Макросы для команд и свойств сборки

...