如何设置 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 文件?
这是我的假设。
- 在我的插件项目中安装 Typescript NuGet 包
- 使用
[TsClass]
属性 修饰我需要 Typescript 文件的 POCO classes
- 构建时,它会在插件项目中创建的 Scripts 文件夹中生成 Typescript 文件
- 我创建了一个将 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,但拥有它也无妨。
还有一个方法,不知道是不是更好
- 安装 TypeLITE.Lib 包到你的插件项目(你需要在那里引用 TypeLITE 库,因为你想使用 [TsClass] 属性)
将 TypeLITE 包安装到您的 WebResources 项目并修改 TypeLite.tt 文件以包含对您的 plugin.dll
的引用
<#@程序集名称="$(TargetDir)plugin.dll" #>
或者您可以跳过第一步并使用流畅的配置 TypeScript.Definitions().For<YourClass>()
在输出文件中包含特定的 类
我在 MS Dynamics CRM 中工作,我有一个包含我所有 TypeScript 的 WebResources 项目。我有 Plugin .net 库 dll,其中包含一些 POCO 对象,这些对象将通过 Rest 返回到我的 WebResources 项目中的 javascript。如何设置 TypeLite 来构建我的 Typescript 文件?
这是我的假设。
- 在我的插件项目中安装 Typescript NuGet 包
- 使用
[TsClass]
属性 修饰我需要 Typescript 文件的 POCO classes
- 构建时,它会在插件项目中创建的 Scripts 文件夹中生成 Typescript 文件
- 我创建了一个将 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,但拥有它也无妨。
还有一个方法,不知道是不是更好
- 安装 TypeLITE.Lib 包到你的插件项目(你需要在那里引用 TypeLITE 库,因为你想使用 [TsClass] 属性)
将 TypeLITE 包安装到您的 WebResources 项目并修改 TypeLite.tt 文件以包含对您的 plugin.dll
的引用<#@程序集名称="$(TargetDir)plugin.dll" #>
或者您可以跳过第一步并使用流畅的配置 TypeScript.Definitions().For<YourClass>()
在输出文件中包含特定的 类