Мы пытаемся использовать T4 с Visual Studio 2010 (SP1) для создания сценариев для другого языка, основанного на некоторых из наших существующих классов C #. Я надеюсь на следующее:
- Шаблон должен загрузить нашу существующую сборку и использовать объекты из пространства имен в этой сборке.
- Преобразование должно выполняться на каждой сборке на каждой машине разработки и на сервере сборки без каких-либо дополнительных установок.
- (1) и (2) должны работать вместе.
(1) было довольно просто:
<#@ assembly name="$(TargetDir)RequiredProject.dll" #>
<#@ import namespace="RequiredProject.RequiredNamespace" #>
Использование макроса $(TargetDir)
позволило мне ссылаться на dll с полностью определенным UNC-путем (согласно инструкциям , найденным здесь ).
(2) - немного обходной путь, но я думаю, что я решил его: я установил необходимые для преобразования текста SDK 1020 * на другой компьютер и скопировал требуемые .targets и .dll в папку в моем решении, а затем обновил мой файл .csproj для ссылки на локальный файл .targets.
(3) я сталкиваюсь с проблемами. Кажется, что свойство <TransformOnBuild>true</TransformOnBuild>
не очень хорошо работает, когда сборка, на которую ссылаются, должна быть построена до преобразования. Каждый раз, когда я включаю преобразование при сборке со ссылочными сборками, я получаю следующую ошибку:
Compiling transformation: Metadata file '$(TargetDir)RequiredProject.dll' could not be found.
Однако я использую ту же инструкцию по сборке, что и в (1), для ссылки на сборку. Фактически, прямой переход к шаблону .tt и его сохранение все еще дает ожидаемый результат - он просто не работает на этапе «сборки». Я делаю что-то не так или есть способ обеспечить преобразование шаблона после сборки, от которой они зависят? (Или, проще говоря, преобразования шаблона происходят last ?)