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

.Net 的項目都挺重的,一直想找一個輕量級的 CSharp 環境,能像Python那樣,選一個文件就能跑的。以前用的是 LinqPad,但它的缺點也很明顯:算法

(1)     不付費,自動完成不能用(好吧,俺購買了);json

(2)     醜!(這個不能忍受!醜影響心情,做爲一位靠靈感吃飯的算法開發人員,能忍受貴,不能忍受醜!)spa

因而本身動手,把VSCode改爲了輕量級 CSharp 環境。 3d

(1)     創建一個目錄,好比,VSCodeTest,進入該目錄,dotnet new console 建立項目;調試

(2)     用VSCode打開目錄,調試下程序,這時,目錄下自動生成了 launch.json 文件,修改文件,將code

"args": [] 

改成blog

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

這樣,當執行程序時,會自動將當前打開文件的路徑傳給 Main 方法。ip

(3)     創建Scripts目錄,創建Foo.cs 文件,內容以下:開發

//RUN: VSCodeTest.Foo.Test

using System;

namespace VSCodeTest
{
    class Foo
    {
        public static void Test()
        {
            Console.WriteLine("Test Run Script");
        }
    }
}

文件裏,第一行 //RUN: 後面指定運行的方法名稱cmd

(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 看着舒服啊。

相關文章
相關標籤/搜索