Как использовать пользовательскую библиотеку / проект в текстовом шаблоне T4? - PullRequest
7 голосов
/ 01 июня 2011

Я смотрю и не вижу.

У меня есть решение с двумя проектами - проект A (библиотека) и проект B, который является основным проектом и содержит T4текстовый шаблон.

То, что я до сих пор делал - я добавил ссылку в основной проект в проект А. Я включил такую ​​строку в шаблон:

<#@ import namespace="MyProjectA" #>

Пока что есть ошибка "Компиляция преобразования: Не удалось найти тип или имя пространства имен «MyProjectA» (отсутствует директива using или ссылка на сборку?) "

Вопрос : как я могу ссылаться на проект A из текстаtemplate?

Обратите внимание: я хотел бы сослаться на проект внутри решения, а не на файл dll на диске.

Ответы [ 3 ]

10 голосов
/ 24 августа 2013

Использование $(SolutionDir) ссылается на проект через dll в папке bin (только для t4 из-за того, как он разрешает имена сборок).GetDirectoryName не работал, поэтому думал, что поделюсь своим опытом)

4 голосов
/ 01 июня 2011

Вы также должны ссылаться на DLL, используя директиву "assembly".Например:

<#@ assembly name=“System.Xml” #>

Вы также можете ссылаться на dll по их пути.Посмотрите серию Т4 Олега Сыча, где вы найдете все, что вам хотелось бы знать.Вот страница о директиве "assembly": http://www.olegsych.com/2008/02/t4-assembly-directive/

Я боюсь, что шаблон T4 полностью не знает о решении, в котором он живет, поэтому ссылка на другой проект в решении все равно будет иметьбыть сделано в качестве ссылки DLL.Если вы установите атрибут HostSpecific в директиве template следующим образом:

<#@ template language="C#" debug="false" hostspecific="true" #>

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

<#@ assembly name=Path.GetDirectoryName(Host.TemplateFile) + “..\OtherProject\bin\Debug\ClassLibrary1.dll” #>

Я не могу обещать, что это сработает, но это стоит того.

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

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

Если вы хотите использовать метод, заданный @atreeonhill, и хотите использовать другое значение макроса, тогда все макросы VS приведены здесь: Макросы для команд и свойств сборки

...