如何设置 TypeLite 以在其他项目中构建类型

How to setup TypeLite to build types in other projects

我在 MS Dynamics CRM 中工作,我有一个包含我所有 TypeScript 的 WebResources 项目。我有 Plugin .net 库 dll,其中包含一些 POCO 对象,这些对象将通过 Rest 返回到我的 WebResources 项目中的 javascript。如何设置 TypeLite 来构建我的 Typescript 文件?

这是我的假设。

  1. 在我的插件项目中安装 Typescript NuGet 包
  2. 使用 [TsClass] 属性
  3. 修饰我需要 Typescript 文件的 POCO classes
  4. 构建时,它会在插件项目中创建的 Scripts 文件夹中生成 Typescript 文件
  5. 我创建了一个将 Typescript 文件复制到我的 WebResources 项目的构建后事件

有没有更简单的方法? 我是否做出了错误的假设?

更新

根据 Lukas 的回答,我更新了我的 TypeLite。Net4.tt 文件如下所示:

<#@ template debug="false" hostspecific="True" language="C#" #>
<#@ assembly name="$(TargetDir)TypeLite.dll" #>
<#@ assembly name="$(TargetDir)TypeLite.Net4.dll" #>
<#@ assembly name="$(TargetDir)Xrm.Plugins.dll" #>
<#@ assembly name="$(TargetDir)$(TargetFileName)" #>

<#@ import namespace="TypeLite" #> 
<#@ import namespace="TypeLite.Net4" #> 
<#@output extension=".d.ts"#>
<#@include file="Manager.ttinclude"#>
<# var manager = Manager.Create(Host, GenerationEnvironment); #>

<# var ts = TypeScript.Definitions()
        .WithReference("Enums.ts")
        .For<Xrm.Plugins.Rest.Poco.AccountLookupResponse>();
#>

<#= ts.Generate(TsGeneratorOutput.Properties) #>

<# manager.StartNewFile("Enums.ts"); #>
<#= ts.Generate(TsGeneratorOutput.Enums) #>
<# manager.EndBlock(); #>
<# manager.Process(true); #>

这会在 TypeLite.Net4.d.ts 文件中生成正确的定义。我目前没有在我的 class 中使用任何枚举,因此目前不需要 Enums.ts,但拥有它也无妨。

还有一个方法,不知道是不是更好

  1. 安装 TypeLITE.Lib 包到你的插件项目(你需要在那里引用 TypeLITE 库,因为你想使用 [TsClass] 属性)
  2. 将 TypeLITE 包安装到您的 WebResources 项目并修改 TypeLite.tt 文件以包含对您的 plugin.dll

    的引用

    <#@程序集名称="$(TargetDir)plugin.dll" #>

或者您可以跳过第一步并使用流畅的配置 TypeScript.Definitions().For<YourClass>() 在输出文件中包含特定的 类