2013-04-18 10 views
6

Uwaga: Jestem nowy w prawie każdej technologii, której tu używam, więc wybacz mi proszę, jeśli brakuje mi oczywistego ..Kompilacja kompilacji: Nie można znaleźć nazwy typu ani przestrzeni nazw podczas uruchamiania TypeLite.tt

Zaczynam komunikować się z MVC 4 z Entity Framework 5 i Web API i chcę użyć TypeScript with Knockout, aby zrobić coś z UI. Znalazłem projekt TypeLite, który weźmie mój model EF i wygeneruje dla mnie interfejsy TypeScript, aby wszystko było "mocno" wpisane.

Moje rozwiązanie składa się z 3 projektów:

  • MyApp.dll = Zawiera wszystkie MVC pracować
  • MyApp.Domain.dll = Zawiera model domeny EF
  • MyApp.WebAPI.dll = zawiera prace WebAPI

i dodaje odniesienie TypeLite do projektu MojaApl (poprzez Nuget) i zmodyfikowała TypeLite.tt czytać:

<#@ 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>() #> 

Kiedy "Run Niestandardowe narzędzia" na TypeLite.tt pojawia się błąd:

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

Próbowałem dodając linię (s):

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

wciąż zachowuje dając mnie jednak ten sam błąd. Jestem pewien, że brakuje mi czegoś trywialnego, a ja wciąż zbieram przez tysiące artykułów, które dr. Google znajduje dla mnie, odwołując się do poszukiwania tego, ale mam nadzieję, że ktoś tutaj pomoże mi znaleźć światło.

dzięki za pomoc ...

Odpowiedz

13

T4 silnik szablonów, który napędza maszynopis Interfejsy generacji, działa jako osobny proces, więc mimo MyApp.WebAPI referencje projektu MyApp.Domain.dll, T4 nie wie o tym.

Powinieneś dodać dyrektywę montażu, która wskazuje MyApp.Domain.dll na TypeLite.tt. To T4 odpowiednik polecenia „Add Reference” z regularnych # projektów C.

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

$(SolutionDir) jest zmienną, która zawiera ścieżkę do katalogu rozwiązań.

+2

Dziękuję Lukas! Zmodyfikowany kod, aby rozwiązać mój problem: ThinkingCap

+0

Dodanie tego do T4 zadziałało dla mnie <# @ assembly name = "$ (TargetPath) "#> –

Powiązane problemy