TypeLite(二)-- 编写生成器
来源:互联网 发布:威科先行法律数据库 编辑:程序博客网 时间:2024/05/17 09:33
此文部分摘自Part II - Using TypeLite to Generate TypeScript
TypeLite默认使用T4编写模版,假如不想使用T4,可以创建一个控制台程序,并直接使用TypeLite的Api.
1. 创建工程
- 创建C#控制台工程
- 安装TypeLite库到此工程
2. 修改Program.cs
using System;using System.IO;using System.Reflection;using TypeLite;namespace TypeScriptSample.Generator{ class Program { static void Main(string[] args) { var assemblyFile = args[0]; var outputPath = args[1]; LoadReferencedAssemblies(assemblyFile); GenerateTypeScriptContracts(assemblyFile, outputPath); } private static void LoadReferencedAssemblies(string assemblyFile) { var sourceAssemblyDirectory = Path.GetDirectoryName(assemblyFile); foreach (var file in Directory.GetFiles(sourceAssemblyDirectory, "*.dll")) { File.Copy(file, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, new FileInfo(file).Name), true); } } private static void GenerateTypeScriptContracts(string assemblyFile, string outputPath) { var assembly = Assembly.LoadFrom(assemblyFile); // If you want a subset of classes from this assembly, filter them here var models = assembly.GetTypes(); var generator = new TypeScriptFluent() .WithConvertor<Guid>(c => "string"); foreach (var model in models) { generator.ModelBuilder.Add(model); } //Generate enums var tsEnumDefinitions = generator.Generate(TsGeneratorOutput.Enums); File.WriteAllText(Path.Combine(outputPath, "enums.ts"), tsEnumDefinitions); //Generate interface definitions for all classes var tsClassDefinitions = generator.Generate(TsGeneratorOutput.Properties | TsGeneratorOutput.Fields); File.WriteAllText(Path.Combine(outputPath, "classes.d.ts"), tsClassDefinitions); } }}
3. 运行
打开cmd
TypeScriptSample.Generator.exe ..\\..\\..\\TypeScriptSample.Models\\bin\\debug\\TypeScriptSample.Models.dll ..\\..\\..\\TypeScriptSample.Web\\App\\server
参数:
1. 第一个参数为需要提取typescript的dll
2. 第二个参数为输出文件夹
可以写成bat文件,在需要转换时运行
也可以添加到项目编译事件,在编译项目成功后,直接运行
4. 只提取添加注解的类
此程序会转化dll中所有的类,如只需提取添加[TsClass]注解的类,需修改
函数GenerateTypeScriptContracts为
private static void GenerateTypeScriptContracts(string assemblyFile, string outputPath) { Assembly.LoadFrom(assemblyFile); var ts = TypeScript.Definitions().ForLoadedAssemblies(); ////Generate enums var tsEnumDefinitions = ts.Generate(TsGeneratorOutput.Enums); File.WriteAllText(Path.Combine(outputPath, "enums.ts"), tsEnumDefinitions); //Generate interface definitions for all classes var tsClassDefinitions = ts.Generate(TsGeneratorOutput.Properties | TsGeneratorOutput.Fields); File.WriteAllText(Path.Combine(outputPath, "classes.d.ts"), tsClassDefinitions); }
0 0
- TypeLite(二)-- 编写生成器
- 编写自定义Yeoman生成器
- TypeLite (一) -- 安装及使用
- 如何编写 Python 文档生成器?
- Qt编写QUI皮肤生成器
- 编写“木马生成器”软件总结
- GUID生成器(二)
- 代码生成器工具之二
- 代码生成器原理(二)
- MkDocs项目文档生成器(二)
- 用PHP编写PDF文档生成器
- 用PHP编写PDF文档生成器
- 用PHP编写PDF文档生成器
- jar小说生成器的编写思路
- SDK编写简单的随机数生成器
- 用PHP编写PDF文档生成器
- Javascript编写的EditPlus注册码生成器
- VB编写的验证码生成器
- Vue.js学习系列(三十二)-- Vue.js样式绑定(三)
- 大数据工程师(开发)面试系列(5)
- maven SpringMVC,Spring,Mybatis整合
- BZOJ 2002 分块
- 23种设计模式分析(1):创建型模式
- TypeLite(二)-- 编写生成器
- 第三章 字符串、向量和数组(重点)
- 【Java集合源码剖析】LinkedHashmap源码剖析
- 华为OJ训练之0033-170111-识别有效的IP地址和掩码并进行分
- Google开源SLAM软件cartographer中使用的UKF滤波器解析
- PAT-A 1093. Count PAT's (25)
- 2017湖南多校第三场A(1025): Lawn mower
- 机器学习-第一天-机器学习的概念
- c语言形参传递的问题