编译转换:运行TypeLite.tt时找不到类型或命名空间名称

Thi*_*Cap 7 javascript asp.net-mvc entity-framework typescript

免责声明:我对我在这里使用的每一项技术都很陌生,所以请原谅我,如果我错过了明显的......

我开始使用Entity Framework 5和Web API搞乱MVC 4,我想使用带有Knockout的TypeScript来做一些UI的东西.我找到了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>() #>
Run Code Online (Sandbox Code Playgroud)

当我在TypeLite.tt上"运行自定义工具"时,我收到错误:

编译转换:找不到类型或命名空间名称"MyApp"(您是否缺少using指令或程序集引用?)

我试过添加这些行:

<#@ import namespace="MyApp" #>
<#@ import namespace="MyApp.Domain" #>
<#@ import namespace="MyApp.Domain.Models" #>
Run Code Online (Sandbox Code Playgroud)

它仍然一直给我同样的错误.我确信我错过了一些微不足道的事情,而且我仍在通过谷歌博士找到的成千上万篇文章来引用我的搜索,但我希望有人可以帮我找到答案.

谢谢你的帮助...

Luk*_*brt 15

T4模板引擎驱动TypeScript接口生成,作为一个单独的进程运行,因此即使MyApp.WebAPI项目引用了MyApp.Domain.dll,T4也不知道它.

您应该将指向MyApp.Domain.dll的程序集指令添加到TypeLite.tt.它是常规C#项目中"添加引用"命令的T4模拟.

<#@ assembly name="$(SolutionDir)path\to\MyApp.Domain.dll" #>
Run Code Online (Sandbox Code Playgroud)

$(SolutionDir) 是一个变量,包含解决方案目录的路径.

  • 谢谢Lukas!修改后的代码来解决我的问题:<#@ assembly name ="$(SolutionDir)MyApp.Domain\bin\$(ConfigurationName)\ MyApp.Domain.dll"#> (2认同)