vs2022+ Community,razor页面生成插件
编译Razor页面生成html,压缩,复制到输出目录.
Doc文档
插件新开发版本使用了这个库,比起使用原生的VSSDK开发,要简便很多.vsct文件有提示,直接和类关联了,修改xml时,类也对应改变.代码大幅简化了,很大程度的简化了插件开发.
- js,css,html的mini压缩输出依赖NUglify这个工具
- sass,stylus,less编译依赖WebCompiler插件
- 编译razor使用了项目RazorService,以前使用的是RazorEngine但是没有找到.netcore版本.这个库使用自带的Razor库实现了一些简单的功能.
- 需要安装2个项目,插件和VSIXService服务.
- 4个命令的快捷键,右件菜单,还加入在"扩展"->"PublishWeb"下.
- 发布编辑文件Alt+QQ
- 发布选中文件Alt+11
- 发布选中文件夹Alt+22
- 发布整个项目Alt+33
- 首次运行时,会生成配置文件publish.josn,在项目根目录下,但可能没有包含到项目,需要显示项目所有文件查看.
- 有2个项目,WebFilePublishVSIX(插件项目)和VSIXService(windows服务),插件和服务通过socket通信.这类似客户端和服务端结构的程序.
- 插件项目负责和VS交互,比如获取项目目录和文件信息,生成命令菜单等.服务项目是一个本地的windows服务,主要功能是实现命令任务,比如发布文件,编译razor文件,压缩js/css/html这些工作.
- 点击命令后,实例化Publisher.cs类,加载配置文件.
- 项目首次运行命令时,会生成配置文件,在根目录下.运行后会发布到项目根目录下的dist目录.通过修改配置文件,规定发布要求.
- 查找当前活动的文件/目录/项目,根据配置文件设置和文件扩展名,生成请求数据.
- 根据命令类型,选择一个执行目标,比如"发布文件"命令,会寻找当前选中的文件.
- 根据配置文件,检查这个文件是否可以发布.例如:这个文件被加入了配置文件禁止发布,那么就不会发布这个文件.
- 计算文件发布路径,优先使用配置的发布路径.没有配置时,使用默认规则:例如"根目录下的/html/index.cshtml",会发布到"发布目录/html/index.html".简单来说,发布文件就是将文件从项目根目录copy到了发布目录,文件从根目录开始的目录结构不变化.
- 将文件路径和发布路径,还有其它参数,例如是否压缩等,打包成数据包.
- 将请求数据发送到服务,服务执行任务后返回结果
- 与服务项目建立socket连接,将数据包发送到服务.
- 服务根据数据参数,分析要执行的任务.例如:razor文件会编译成html文件,css/js等文件会压缩,然后将处理后的文件输出到发布目录.
- 生成一个处理结果,返回给插件项目.
- 在vs输出界面显示生成结果.
- 收到结果后,断开socket连接,将处理结果显示在vs"输出"窗口.
- 到此,文件发布结束.文件已经处理,生成在发布目录下了.
- Publish/Publisher.cs 命令类,使用这个类实现命令.
- Publish/CmdContext.cs 命令运行时的上下文数据类.
- Publish/ConfigM.cs 配置文件的实体类
- Commands目录下的类是4种命令实现,采用了Toolkit插件工具库提供的简洁接口,比起原生的接口,去掉了一些繁琐的代码,只需要写具体命令执行代码就可以了.
- 使用.Net通用主机,承载一个socket监听服务程序.
- 接受来自插件程序的请求,实现razor编译,css/js/html压缩等任务.
- 每个功能是一个命令类,实现IFun接口,通过命令编号调用.
- 主要类:
- Worker.cs连接对象,每个socket连接会建立一个对象.
-
- WorkContent.cs连接上下文数据对象
- MainService.cs监听服务
- Commander.cs命令注册管理
- cmds目录,含有所有命令类.
- 通信约定:
- 请求数据:第1个字节是命令id,后面是参数,每个命令的参数形式自定义.
- 回应数据:第1个字节是命令是否成功,后面是数据或者结果信息.