亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

自己動手,打造輕量級VSCode/C#環境代替LinqPad

標簽:
C#

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

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

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

https://img1.sycdn.imooc.com//5b933b710001f38510000711.jpg

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

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

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

1"args": []

改为

1"args": ["${file}"]

这样,当执行程序时,会自动将当前打开文件的路径传给 Main 方法。

(3)     建立Scripts目录,建立Foo.cs 文件,内容如下:

复制代码

//RUN: VSCodeTest.Foo.Testusing 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("http://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 看着舒服啊。

https://img1.sycdn.imooc.com//5b933b7c0001d1bd12000739.jpg

 

作者:xiaotie , 集异璧实验室(GEBLAB)

出处:https://www.cnblogs.com/xiaotie/p/9607923.html  

若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
49
獲贊與收藏
218

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消