自己动手,打造轻量级VSCode/C#环境代替LinqPad

.Net 的项目都挺重的,一直想找一个轻量级的 CSharp 环境,能像Python那样,选一个文件就能跑的。之前用的是 LinqPad,但它的缺点也很明显:

(1) 不付费,自动完成不能用(好吧,俺购买了);

(2) 丑!(这个不能忍受!丑影响心情,作为一位靠灵感吃饭的算法开发人员,能忍受贵,不能忍受丑!)

自己动手,打造轻量级VSCode/C#环境代替LinqPad

于是自己动手,把VSCode改成了轻量级 CSharp 环境。

(1) 建立一个目录,比如,VSCodeTest,进入该目录,dotnet new console 创建项目;

(2) 用VSCode打开目录,调试下程序,这时,目录下自动生成了 launch.json 文件,修改文件,将

csharp;gutter:true; "args": []</p> <pre><code> 改为 ;gutter:true;
"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,支持文件间的相互引用。

缺点:如果项目里其他文件有编译错误,则会影响当前文件的执行。

Original: https://www.cnblogs.com/xiaotie/p/9607923.html
Author: xiaotie
Title: 自己动手,打造轻量级VSCode/C#环境代替LinqPad

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554072/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • CentOS7 安装 OpenBLAS

    将仓库clone到本地 git clone https://github.com/xianyi/OpenBLAS.git GitHub 地址:https://github.com/…

    技术杂谈 2023年7月10日
    062
  • 面试题目:手写一个LRU算法实现

    LFU Least Frequently Used 算法根据数据的历史访问频率来淘汰数据,其核⼼思想是”如果数据过去被访问多次,那么将来被访问的频率也更⾼”…

    技术杂谈 2023年7月11日
    081
  • idea主类main左侧栏启动按钮消失原因

    我去找网上的方法发现都是去调正”项目结构”中的model设置,而我本地的model并没有问题,但是我还是删除model重加载,发现依然无效,经过我再三检测我…

    技术杂谈 2023年6月21日
    081
  • 【转】iOS NFC

    概述 iOS 在 iOS11(iPhone7/iPhone7 Plus) 之后开放 NFC 主动扫描功能 并且在 iOS13(iPhoneXS/iPhoneXR) 后开放 NFC …

    技术杂谈 2023年6月1日
    088
  • Maven常用命令

    一、Maven常用命令及其介绍 mvn clean 对项目进行清理,删除target目录下编译的内容 mvn compile 编译项目源代码 mvn test 对项目进行运行测试 …

    技术杂谈 2023年6月21日
    084
  • GPS NEMA 0183协议

    注:发送次序$GPZDA、$GPGGA、$GPGLL、$GPVTG、$GPGSA、$GPGSV*3、$GPRMC 如:$aaccc,ddd,ddd,…,ddd*hh 1…

    技术杂谈 2023年5月31日
    089
  • 低代码如何构建支持OAuth2.0的后端Web API

    OAuth2.0 OAuth 是一个安全协议,用于保护全球范围内大量且不断增长的Web API。它用于连接不同的网站,还支持原生应用和移动应用于云服务之间的连接,同时它也是各个领域…

    技术杂谈 2023年5月31日
    087
  • NoteOfMySQL-14-日志管理

    一、MySQL日志 日志是MySQL数据库的重要组成部分,日志文件记录了MySQL数据库的日常操作和错误信息,可以通过分析这些日志文件了解MySQL数据库的运行情况。MySQL数据…

    技术杂谈 2023年7月11日
    093
  • 阿里云有奖体验:块存储快速入门

    实验简介 场景将提供一台配置了CentOS 7.7版本的ECS实例(云服务器)和两块高效云盘的数据盘。通过本教程的操作,您可以通过阿里云控制台和Linux操作系统,快速入门块存储。…

    技术杂谈 2023年7月11日
    059
  • Jmeter中JSR223设置变量

    https://blog.csdn.net/sunnygirltest/article/details/119112673 https://blog.csdn.net/u01258…

    技术杂谈 2023年5月30日
    093
  • Linux下安装 SkyWalking 分布式追踪系统

    Linux下安装 SkyWalking 分布式追踪系统 1、SkyWalking简介 1.1 SkyWalking介绍 SkyWalking项目是由华为大牛吴晟开源的个人项目,目前…

    技术杂谈 2023年6月21日
    0106
  • OptaPlanner 用例 场景

    用例价值建议车辆路线 员工排班 维护调度 任务分配优化 学校时间表 云优化 会议安排 演示视频这些视频中的每一个都展示了一个示例和/或一个特殊功能: 会议安排:与 Excel 集成…

    技术杂谈 2023年6月1日
    082
  • [原则]产品规划怎么做?

    [原则]产品规划怎么做? [原则]产品规划怎么做? posted @2021-11-02 10:05 卖烧烤的鱼 阅读(37 ) 评论() 编辑 Original: https:/…

    技术杂谈 2023年5月30日
    0103
  • 为什么人们都讨厌开会?

    原创不易,求分享、求一键三连 会议是工作中最重要的组成部分,因为他需要解决两个核心难题: 信息传递; 达成一致; 有效的信息传递是战略落地的前提条件,更多的认知统一更是可以加速成功…

    技术杂谈 2023年6月1日
    0108
  • Kubernetes 升级后 ingress api 变化带来的问题

    将 k8s 从 1.17.0 升级到 1.22.3 之后部署 ingress 时报错 error: unable to recognize “cnblogs-ingre…

    技术杂谈 2023年5月30日
    067
  • intellij generate main method

    https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000095864-I-need-main-m…

    技术杂谈 2023年5月31日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球