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

时间:2015-10-02 13:44:19

标签: typelite

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

这是我的假设。

  1. 在我的插件项目中安装Typescript NuGet包
  2. 使用[TsClass]属性
  3. 装饰我需要的Typescript文件的POCO类
  4. 在构建时,它会将Typescript文件生成到它将在插件项目中创建的Scripts文件夹
  5. 我创建了一个postcriild事件,将Typescript文件复制到我的WebResources项目
  6. 有更简单的方法吗? 我做出了错误的假设吗?

    更新

    从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文件中生成正确的定义。我目前没有在班上使用任何枚举,所以目前没有必要使用Enums.ts,但拥有它并没有什么坏处。

1 个答案:

答案 0 :(得分:4)

还有另外一种方法,但我不确定,它是否更好。

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

    &lt;#@ assembly name =&#34; $(TargetDir)plugin.dll&#34; #&GT;

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