自己动手,打造轻量级VSCode/C#环境代替LinqPad
.Net 的项目都挺重的,一直想找一个轻量级的 CSharp 环境,能像Python那样,选一个文件就能跑的。之前用的是 LinqPad,但它的缺点也很明显:
(1) 不付费,自动完成不能用(好吧,俺购买了);
(2) 丑!(这个不能忍受!丑影响心情,作为一位靠灵感吃饭的算法开发人员,能忍受贵,不能忍受丑!)
于是自己动手,把VSCode改成了轻量级 CSharp 环境。
(1) 建立一个目录,比如,VSCodeTest,进入该目录,dotnet new console 创建项目;
(2) 用VSCode打开目录,调试下程序,这时,目录下自动生成了 launch.json 文件,修改文件,将
"args": []
改为
"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 == )
{
String fileName = args[];
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();
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(, lastIdx);
String methodName = cmd.Substring(lastIdx + );
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 看着舒服啊。
自己动手,打造轻量级VSCode/C#环境代替LinqPad的更多相关文章
- 基于Mono和VSCode打造轻量级跨平台IDE
近期Visual Studio推出Mac版本号的消息迅速在技术圈里刷屏,当project师们最喜欢的笔记本电脑Mac,邂逅地球上最强大的集成开发环境Visual Studio的时候,会碰撞出如何精 ...
- vagrant打造自己的开发环境
vagrant打造自己的开发环境 缘由: 在网上看到斌哥,爽神都写了关于vagrant的博客,都在说很强大,所以很好奇这玩意怎么个强大,然后也就自己来一发玩玩看看. 真实缘由: 说实话是电脑配置太低, ...
- 用notepad++ 打造轻量级Java编译器
http://blog.163.com/jackie_howe/blog/static/19949134720125591752396/ 用notepad++ 打造轻量级Java编译器 2012-06 ...
- 打造高效前端工作环境 - tmux
打造高效前端工作环境 - tmux 前言 现在前端开发可不容易啊,先打开个VIM,然后再打开个lite-server,一不小心写个ES2015还要打开个gulp来做预编译,如果能把这么多个窗口放在一 ...
- 自给自足:动手打造html5俄罗斯方块
时间:凌晨2:36 历时:两晚+半个下午 代码:约300行 这两天发烧,头痛脑壳昏的,没想到竟然还能有动力去做小游戏,其实这不是我第一次想要弄个俄罗斯方块,前几个星期的时候就尝试着去弄一个,然后被凌乱 ...
- 动手打造轻量web服务器(二)路由
tomcat启动慢?自己动手打造轻量web服务器(一) 上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?) 首先,根据http获得请求行 val scanner ...
- VSCode+C++环境搭建
date: 2019-10-05 VSCode+C++环境搭建 其实并不完整,毕竟我也只是一个OIer,并不会很高深的东西.(众所周知,OIer主业是软件开发) 安装VSCode 下载安装包 这个很简 ...
- 39 Ubuntu下配置python的vscode开发环境
0 引言 最近想在ubuntu下搞深度学习,首先配置了python的vscode开发环境.在配置python时,选择了Anaconda3.x,保证了其相对于系统python2.x的独立性.另外,vsc ...
- Mac OS安装Go语言及配置VSCode开发环境:一个工具(gopls)解千愁
前言 截止到目前为止,Go语言已经更新到1.14.1,网上的很多教程均已经过时,我在此汇总并整理一下相关的教程,提供一个适合当下的Mac OS教程. 教程中使用了Go在1.11之后推出的依赖包管理工具 ...
随机推荐
- 图示Java类的初始化顺序
Java类的初始化顺序 在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行. 以下为代码验证阶段,一共三个类 ...
- xamarin.forms之page
最近在使用xamarin.forms做APP开发,之前做过ios的应用,虽然没做过安卓,但之前也有一点了解,什么四大组件五大布局啥的,微软的xamarin.forms的文档也挺详细的,基本都是复制粘贴 ...
- JavaScript 文档对象模型(DOM)
文档对象模型 通过 JavaScript,您可以重构整个 HTML 文档.您可以添加.移除.改变或重排页面上的项目.要改变页面的某个东西,JavaScript 就需要获得对 HTML 文档中所 ...
- php 的优化
=>PHP函数禁用 disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshel ...
- [PHP] 抽象类abstract的回顾
1.abstract定义为抽象的类不能被实例化. 2.它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的. 3.被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实 ...
- PHP中的__get和__set理解
先来了解一下PHP类中的__get和__set函数 当我们试图获取一个不可达属性时(比如private),类会自动调用__get函数.当试图设置一个不可达属性时(比如private),类会自动调用__ ...
- 原生JS实现简易轮播图
原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = funct ...
- vue webpack配置Error
学写慕课网的Vue核心技术Vue+Vue-Router+Vuex+SSR实战精讲时,发现因为webpack,babel等升级了.按照视频的代码配置webpack会出问题. 报错:TypeError: ...
- Laravel5中通过SimpleQrCode扩展包生成二维码实例
Simple Qrcode是基于强大的Bacon/BaconQrCode库开发的针对Laravel框架的封装版本,用于在Laravel中为生成二维码提供接口. 安装SimpleQrCode扩展包 在项 ...
- java-同步控制及不可变设置(只读访问)
1.还是直接上代码简单了解一下: package com.synchronize.test; import java.util.ArrayList; import java.util.Collecti ...