天天看点

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到【生成实体】心里可能会暗想,T4模板都可以做了、动软不是已经做了么、不就是读库保存文件到指定路径么……

  我希望做的效果是:

  1.工具集成到vs上

  2.动作完成后体现到项目(添加、删除项目项)

  3.使用简单、轻量、灵活(配置化)

  4.不依赖ORM(前两点有点像EF的DBFirst吧?)

  文章最后会给上源码地址。

   下面是效果图:

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  以上是完整处理流程,我打算选择部分流程来讲。如果有对Visual Studio Package开发还没一个认识,可以看我之前写的一篇《Visual Studio Package 插件开发》。

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  从上图看见,按钮是在选中项目右键弹出的菜单栏里。

  打开vsct文件,修改Group的Parent节点,修改对应的guid和id。

  之前那边文章有提到在文件:您的vs安装目录\VisualStudio2013\VSSDK\VisualStudioIntegration\Common\Inc\vsshlids.h 可以找到需要修改的名称,但是右键是没有在文件里定义,因此我们需要另外换一种方法。

  1、打开注册表编辑器(打开运行窗口,输入regedit),

  2、路径[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\General],

  3、右击-新建-DWORD(32-位)值(D),其命名为EnableVSIPLogging

  4、并将其值改为1。重启VS,打开项目

  5、按下Ctrl+Shift,对项目点击右键,就会弹出窗口(如下图)

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  Guid和CmdID的值就是我们需要的,在vsct文件Symbols节点添加GuidSymbol项,value上图的{D309F791-903F-11D0-9EFC-00A0C911004F},IDSymbol项value为1026。

  最后在Group的Parent节点的属性guid和id改为与上面对应,下面代码为例子。

PS:上面方法有点久远了,现在2017、2019可以用新的方式来查找需要的功能guid与cmdID。

在VS的【扩展与更新】搜索并安装Extensibility Tools,然后在vs【视图】-【 Enable VSIP Logging】点击并重启后,就可以用ctrl+shirt+右键点击需要查的界面,就可以弹出需要的信息,我测试过vs2017可用。

非常感谢yanusosu兄弟的贡献。

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

View Code

   重点是DTE 接口的使用,MSDN的描述是:DTE 接口Visual Studio 自动化对象模型中的顶级对象。强大到当前开发环境中任何属性可以拿到例如:当前打开的文档集合,解决方案下的项目信息……剩下自己看,传送门

   下面是代码示例:

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  配置存放两点信息:数据库连接、类文件模版,同时我们约定存放在项目根目录下。如下图

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  那么,剩下就是XML的基本获取处理了。__entity.xml的模版在源码里,可自行拷贝去需要使用的项目,以下是代码示例:

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  查询当前数据库的表集合,传给窗体做列表展示,直接上代码:

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  选择响应的表后,查询出对应的表结构,一般实体的所需要的信息有:列名、列备注、类型、长度、是否主键、是否自增长、是否可空,继续上代码:

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  开始我是尝试用T4的,发现不方便,繁杂的声明。因此我选择了nVelocity,这里不做太多介绍,附上相关文章学习,传送门

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  之前已经拿到的文件模版,通过上面的方法输出类文本,保存到选中项目的根目录下。

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  终于到了最后一步了,部分人以为保存了文件后就完事了,最后通过包含文件就完事了。我们还是有点追求的,既然做成了插件就要更加的方便化。

  通过之前[读取选中项目信息]步骤拿到的EnvDTE.Project ProjectDte,使用以下扩展方法进行添加、删除项目项。

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  部分同学可能想调试的时候会出现:无法直接启动“类库输出类型”项目,可以在项目属性-调试配置:

  1.启动配置外部程序:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe

  2.命令行参数:/rootsuffix Exp

Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

  估计有同学会制作自己的图标,另外附上两条icon制作的网站:

  http://iconfont.cn/search/index

  http://www.easyicon.net/covert/

  整篇文章的技术难点并不多,但是因为插件开发的资料相对较少,80%的时间花去找接口文档、找资料。

  此工具的原型是公司架构师的,公司所有开发都在用,但是他把源码丢了………………好奇心使我重新实现了一份,当然了,说不定哪天带团队的时候会用上。

  最后双手奉上源码,并不是什么牛逼的东西,希望可以帮助需要的同学。https://github.com/SkyChenSky/AutoBuildEntity

  如果本篇文章对您有帮助,可以点击左下角的推荐,这是给我最大的鼓励,如果有什么建议和优化,可以在下面评论提出,谢谢。

作  者:

陈珙

出  处:http://www.cnblogs.com/skychen1218/

关于作者:专注于微软平台的项目开发。如有问题或建议,请多多赐教!

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!