公司使用ABP框架,框架中含有大量重复性代码如仓储 dto appservice等所以编写了代码生成器来直接生成这部分代码
- 思路
a) 通过项目中的配置文件读取数据库字段,然后通过模板+字段+表信息生成文件,然后把文件放到项目对应位置。这个实现只能使用在ABP项目上面,并且命名空间,实体后缀,项目结构都要约定好,因此只能适用公司的ABP项目。
- 关键点说明
a) Vs增加菜单 ->读取项目信息->点击弹出窗体->用户选择数据表及要生成的相关代码->点击生成
b) 除了第一,二步,后面的跟正常窗体开发一致
c) 新建VSIX project 项目,这种是VS插件项目
d) Vs增加菜单
a) Vs可以选择多个地方增加菜单,根据实际情况选择在解决方案右键上增加菜单
b) 添加->新建项->Visual C#项->Extensibility->VSPackage-> Command 新增后才会有.vsct 文件
c) 在.vsct文件中修改
- IDM_VS_MENU_TOOLS -> IDM_VS_CTXT_SOLNNODE 解决方案右键菜单按钮
- ButtonText 里面 改成想要的按钮名称
e) 读取项目信息
a) AsyncPackage package 在 Command.cs 文件中有这个字段,这个字段有实现了很多接口。做一个转换
DTE dte = (DTE)ServiceProvider.GetService(typeof(DTE));
Assumes.Present(dte);
- dte可以读到解决方案信息及项目信息
f) 点击按钮后弹出一个窗体,把读取到的信息传到窗体。窗体后续开发跟正常窗体开发一致。
g) 注意
a) 无法通过以下代码(AppDomain.CurrentDomain.BaseDirectory/ Environment.CurrentDirectory)读取插件根目录,反射/或者配置相关信息要注意处理。
后续模板引擎使用 NVelocity
参考:https://www.cnblogs.com/chriskwok/p/10724970.html