2013-04-18 5 views
6

Отказ от ответственности: Я новичок в каждой части технологии, которую я использую здесь, поэтому, простите меня, пожалуйста, если у меня отсутствует очевидное. .Компиляция преобразования: Тип или имя пространства имен не удалось найти при запуске TypeLite.tt

Я начинаю возиться с MVC 4 с Entity Framework 5 и веб-API, и я хочу использовать TypeScript с Knockout для создания некоторых элементов интерфейса. Я нашел проект TypeLite, который возьмет мою модель EF и сгенерирует интерфейсы TypeScript для меня, чтобы все было «сильно» напечатано.

Мое решение состоит из 3-х проектов:

  • MyApp.dll = Содержит все MVC работы
  • MyApp.Domain.dll = Содержит доменную модель EF
  • MyApp.WebAPI.dll = Содержит WebAPI работу

я добавил ссылку TypeLite к проекту MyApp (через NuGet), и модифицировал TypeLite.tt следующим образом:

<#@ template debug="false" hostspecific="True" language="C#" #> 
<#@ assembly name="$(SolutionDir)packages\TypeLite.0.8.2\lib\net40\TypeLite.dll" #> 
<#@ assembly name="$(TargetDir)$(TargetFileName)" #> 
<#@ import namespace="TypeLite" #> 
<#@output extension=".d.ts"#> 
<#= TypeScript.Definitions() 
.For<MyApp.Domain.Models.Country>() 
.For<MyApp.Domain.Models.State>() 
.For<MyApp.Domain.Models.Address>() 
.For<MyApp.Domain.Models.Contact>() #> 

Когда я "Выполнить пользовательский инструмент" на TypeLite.tt я получаю ошибку:

Compiling transformation: The type or namespace name 'MyApp' could not be found (are you missing a using directive or an assembly reference?)

Я попытался добавить строку (ы):

<#@ import namespace="MyApp" #> 
<#@ import namespace="MyApp.Domain" #> 
<#@ import namespace="MyApp.Domain.Models" #> 

Он по-прежнему продолжает давать Мне тоже такая же ошибка. Я уверен, что мне не хватает чего-то тривиального, и я все еще выбираю тысячи статей, которые доктор Google находит для меня ссылкой на поиск этого, но я надеюсь, что кто-то здесь поможет мне найти свет.

Спасибо за любую помощь ...

ответ

13

T4 шаблонный двигатель, который управляет машинопись интерфейсов поколения, работает как отдельный процесс, так что даже если MyApp.WebAPI ссылки на проекты MyApp.Domain.dll, T4 не знает об этом.

Вы должны добавить директиву сборки, которая указывает на MyApp.Domain.dll на TypeLite.tt. Это T4 аналог команды «Добавить ссылку» из регулярных проектов C#.

<#@ assembly name="$(SolutionDir)path\to\MyApp.Domain.dll" #> 

$(SolutionDir) является переменной, которая содержит путь к каталогу решений.

+2

Спасибо Lukas! Измененный код, чтобы решить мой Проблема: <# @ assembly name = "$ (SolutionDir) MyApp.Domain \ bin \ $ (ConfigurationName) \ MyApp.Domain.dll" #> – ThinkingCap

+0

Добавление этого в T4 сработало для меня <# @ assembly name = "$ (TargetPath) "#> –

Смежные вопросы