ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Scripty代码生成接入终极指南:快速集成Cake构建脚本与Visual Studio自定义工具

Scripty代码生成接入终极指南:快速集成Cake构建脚本与Visual Studio自定义工具 Scripty代码生成接入终极指南快速集成Cake构建脚本与Visual Studio自定义工具【免费下载链接】ScriptyTools to let you use Roslyn-powered C# scripts for code generation项目地址: https://gitcode.com/gh_mirrors/scr/ScriptyScripty是一个基于 Roslyn 的 C# 代码生成工具让你用.csx脚本替代 T4 模板自动生成代码。本文讲解Scripty 代码生成的两种进阶玩法通过Cake.Scripty插件把脚本求值接入Cake 构建脚本以及用Visual Studio 自定义工具Custom Tool在 IDE 中随写随生成。▲ Scripty 引擎对脚本的求值流程源自 docs/InterceptDirectiveResolver.mdScripty 的三种接入方式一张图看懂接入方式适用场景所在模块️ VS 自定义工具IDE 内随写随生成所见即所得src/Scripty.CustomTool/️ MSBuild 任务每次构建自动求值src/Scripty.MsBuild/ Cake 插件CI 或脱离 MSBuild 的构建流水线src/Cake.Scripty/三者可以组合使用自定义工具负责改脚本立即生成MSBuild 任务负责每次构建刷新。快速上手Scripty Cake 插件两步接入什么时候才需要 Cake 插件如果你的 Cake 脚本最终调用的是 MSBuild 构建且项目已引用Scripty.MsBuild包构建时脚本会自动求值无需本插件。当你要完全替换 MSBuild、让 Cake 直接驱动代码生成时才需要它。第一步在 Cake 脚本头部声明插件与工具#addin nuget:?packageCake.Scripty #tool nuget:?packageScripty两行缺一不可#addin加载 Cake 插件#tool下载scripty.exe可执行文件——插件最终就是调用它来完成求值的。第二步在任务中调用 Scripty() 并链式调用 Evaluate()Task(Default) .Does(() { Scripty(Project.csproj, new ScriptySettings() { WorkingDirectory ./OptionalWorkingDirectory }) .Evaluate(Script1.csx, Script2.csx); });Scripty()是 Cake 上下文上的扩展方法入口定义在 ScriptyAliases.cs传入项目文件路径 可选的 ScriptySettings.cs 设置Evaluate()接收一个或多个脚本文件名批量求值背后原理Runner 只是把参数转给 scripty.exeScripty()返回 ScriptyRunner它的Evaluate()会把项目路径与各脚本路径组装成命令行参数脚本路径自动转成相对路径再运行scripty.exe进程路径解析规则WorkingDirectory的相对/绝对处理见 ScriptyRunner.cs。Visual Studio 自定义工具3 步开启 IDE 内生成1. 安装扩展在 Visual Studio 扩展库中搜索Scripty安装。扩展清单声明了 Community / Pro 版适配见 source.extension.vsixmanifest。2. 设置 Custom Tool 属性选中.csx脚本 → 属性窗口 → 将自定义工具Custom Tool设为ScriptyGenerator。此值是生成器的注册名硬编码在 ScriptyGenerator.cs 中。3. 触发生成保存脚本时自动生成仅首次设置后自动运行或随时右键 →运行自定义工具Run Custom Tool生成器内部做了什么ScriptyGenerator是 COM 可见类继承 BaseCodeGeneratorWithSite.cs / BaseCodeGenerator.cs实现 VS 的IVsSingleFileGenerator单文件生成器接口。核心逻辑在 GenerateCode 脚本错误/警告会转成 VS 任务列表消息并定位到具体行列 生成的文件自动加入项目并按脚本中的BuildAction设置ItemType 用同名.log文件记录上次的输出本次不再产出的旧文件会被自动清理⚠️ 注意自定义工具不会让脚本每次构建都执行。想要构建时刷新请同时给项目添加Scripty.MsBuild包自动识别项目内所有.csx。Scripty 脚本速写Cake 与 VS 共用的规则两种接入方式求值的是同一套 Scripty 脚本——标准 Roslyn C# 脚本 一批全局属性每个脚本默认引用Microsoft.CodeAnalysis.Workspaces、Microsoft.Build、Scripty.Core全局属性Project项目树可用 Roslyn 分析或 MSBuild API 遍历、Output、Context、ProjectFilePath等Output默认输出脚本同名.cs文件用Output[other.cs]可一次生成多个文件并用BuildAction控制是否参与编译支持#load加载.cs文件写辅助类时也有完整智能提示加载流程见上文流程图常见问题排查清单症状原因与解法Cake 里找不到脚本检查WorkingDirectory相对路径均相对它解析VS 中保存后不生成自定义工具只在你手动设置后生效每次构建生成需Scripty.MsBuild生成文件看不到MSBuild 方式下生成文件默认不入项目首次生成后手动加入即可想调试 VS 扩展按 Debugging.md 配置外部程序启动 devenv.exe在GenerateCode处打断点核心源码路径速查功能文件Cake 扩展入口Scripty()ScriptyAliases.csCake 执行器Evaluate()ScriptyRunner.csVS 生成器ScriptyGenerator.csVS 生成器基类BaseCodeGenerator.cs控制台入口插件实际调用它Program.cs引擎核心src/Scripty.Core/ 一句话总结Cake 管 CI 里的无人值守生成VS 自定义工具管桌面的随写随看——两个入口共用同一套 Scripty 脚本一次编写、两处运行。【免费下载链接】ScriptyTools to let you use Roslyn-powered C# scripts for code generation项目地址: https://gitcode.com/gh_mirrors/scr/Scripty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表