惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - xiaotie

从三个语言(C++,Java,C#)的几个性能测试案例来看性能优化 2015年总结 将知识变成你的技能点 瞎子摸象与刻舟求剑 俺的追求,下一个五年的指导纲领 工作中任务管理的四个原则和四个技能 2014年总结 两个平板打天下-将中国看做一个城市圈,漉战移动互联网、高铁时代 GUI - GEB UI库 招聘视音频工程师 2013 —— 满负荷前进 2014年发展计划 C# 版 flvmerge:快速合并多个flv文件 早起真好 使用Notepad++开发C#,一个复杂点的csscript脚本 把 Notepad++ 打造成一款易用的C#脚本编辑器 怎么看待移动互联网时代 C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效 asp.net 调用(引用 Native dll 的)C++/CLI dll 的问题及解决
自己动手,打造轻量级VSCode/C#环境代替LinqPad
xiaotie · 2018-09-08 · via 博客园 - xiaotie

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

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

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

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

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

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

改为

这样,当执行程序时,会自动将当前打开文件的路径传给 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 看着舒服啊。