自己动手,打造轻量级VSCode/C#环境代替LinqPad
.Net 的项目都挺重的,一直想找一个轻量级的 CSharp 环境,能像Python那样,选一个文件就能跑的。之前用的是 LinqPad,但它的缺点也很明显:
(1) 不付费,自动完成不能用(好吧,俺购买了);
(2) 丑!(这个不能忍受!丑影响心情,作为一位靠灵感吃饭的算法开发人员,能忍受贵,不能忍受丑!)
于是自己动手,把VSCode改成了轻量级 CSharp 环境。
(1) 建立一个目录,比如,VSCodeTest,进入该目录,dotnet new console 创建项目;
(2) 用VSCode打开目录,调试下程序,这时,目录下自动生成了 launch.json 文件,修改文件,将
1 | "args" : [] |
改为
1 | "args" : [ "${file}" ] |
这样,当执行程序时,会自动将当前打开文件的路径传给 Main 方法。
(3) 建立Scripts目录,建立Foo.cs 文件,内容如下:
//RUN: VSCodeTest.Foo.Test using System; namespace VSCodeTest { class Foo { public static void Test() { Console.WriteLine("Test Run Script"); } } }
文件里,第一行 //RUN: 后面指定运行的方法名称
(4) 修改 Program.cs 如下:
using System; using System.IO; using System.Reflection; namespace VSCodeTest { class Program { static void Main(string[] args) { if(args.Length == 1) { String fileName = args[0]; if(File.Exists(fileName) == false) { Console.WriteLine("文件不存在:" + fileName); return; } var it = File.ReadLines(fileName).GetEnumerator(); if(it.MoveNext()) { String line = it.Current; line = line.Trim(); if(line.StartsWith("//RUN:")) { line = line.Substring(6); line = line.Replace(";",""); line = line.Trim(); Eval(line); } } else Console.WriteLine("未指定调用方法: " + fileName); } } static void Eval(String cmd) { Console.WriteLine("[Invoke]:" + cmd); int lastIdx = cmd.LastIndexOf('.'); String typeName = cmd.Substring(0, lastIdx); String methodName = cmd.Substring(lastIdx + 1); try { var type = Type.GetType(typeName); if (type!= null) { var method = type.GetMethod(methodName); if(method != null) { method.Invoke(null,null); return; } } Console.WriteLine("未找到调用方法: " + cmd); } catch(Exception ex) { Console.WriteLine(ex.Message); } } } }
这样,当运行时,它会解析指定的方法名称,通过反射来调用它。
就这么就OK了。打开哪个文件,执行的就是该文件中指定的方法。比如,打开 Foo.cs 文件,按 F5 调试或Ctrl+F5 直接执行,可以看见,程序执行的是指定的方法。
优点:
(1) 支持直接执行;
(2) 支持调试;
(3) 支持引用第三方dll,支持文件间的相互引用。
缺点:如果项目里其他文件有编译错误,则会影响当前文件的执行。
----
还是 VSCode 看着舒服啊。
版权所有,欢迎转载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2012-09-08 值类型不是值类型(ValueType is NOT a Value Type):闲谈.Net类型
2010-09-08 漫水填充及Photoshop中魔术棒选择工具的实现