Ссылка на сборку в шаблоне T4

Прошло некоторое время с тех пор, как я в последний раз использовал 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 полностью отделенный от содержащего сборку проекта, чтобы избежать сбор неправильных сборок, когда цели проекта версии. Проектные сборки отсутствуют больше используется для разрешения шаблона сборочные директивы.

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

Ответы

Ответ 1

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

<#@ assembly name="$(SolutionDir)\Project1\bin\debug\Foo.dll" #>

Ответ 3

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

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