9

免责声明:我对我在这里使用的每一项技术都是新手,所以如果我遗漏了明显的东西,请原谅我......

我开始将 MVC 4 与 Entity Framework 5 和 Web API 搞混了,我想用 TypeScript 和 Knockout 来做一些 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>() #>

当我在 TypeLite.tt 上“运行自定义工具”时,出现错误:

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

我尝试添加以下行:

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

不过,它仍然不断给我同样的错误。我确定我遗漏了一些微不足道的东西,我仍然在谷歌博士为我找到的数千篇文章中挑选参考搜索,但我希望这里有人可以帮助我找到光明。

谢谢你的帮助...

4

1 回答 1

19

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

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

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

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

于 2013-04-18T13:36:18.070 回答