据说你开发.NET还在用VS,小哥哥给你推荐全平台的Rider

本文地址:http://www.cnblogs.com/likeli/p/8461010.htmlhtml

前言

.NET平台的开发一直都只能使用Visual Studio来开发,自从dotnet core 发布后不久,jetbrains 发布了Rider预览版,到目前为止的正式版2017.3.1。博主都使用过,由于博主的主力开发语言是C#,因此一直以来被捆绑到Windows平台不得动弹许久,无比渴望有一个可以跨平台玩儿玩儿的IDE,既然core都有了,那就只差一款顺手的IDE。前端

如下发言不是为了对比各个IDE,是为了表述我在使用过程当中的心理活动linux

Visual Studio

这货你们应该无比熟悉,号称宇宙第一IDE,在.NET平台下拥有几乎不可替代的重要性,没有了这货,绝大部分人都没法开发了。数据库

好了,功能强大那是重要的,性能也不错,可是。。。这货太臃肿了,有木有,我仅仅想要开发个Web API,可是使用VS,个人安装一个不下10GB的IDE。windows

Visual Studio For Mac

这是微软为了拉拢Mac环境开发者的橄榄枝,可是这个橄榄枝仍是太嫩了,各类工具残缺,莫名其妙的BUG。visual-studio-code

刚发布的时候,我经过 官方在线安装 进行安装,不知道是由于qiang的问题,一直超时,后来经过网友提供的地址直接下载了完整的安装包,进行安装的。后端

当时的第一印象,是:握草,这东西是Bate版吧,太草率了~试用了一阵后,就卸载了,根本没法在正式环境下使用。app

最近,再次安装了一次,仍是没法经过官方的在线安装进行安装,差评!再次尝试几回后,发现BUG少了许多,性能和实用性仍是太差太差。编辑器

Visual Studio Code

我平时用这个编辑器开发Python脚本和简单的Go程序,由于打开快速,可是始终以为,这是一个文本编辑器,而不是一个IDEide

Jetbrains Rider

正主来了,我使用Rider从测试预览版到目前最新的正式版至少有了一年的时间了(Windows、Mac、Ubuntu),通过我这些时间的使用,我也发现了这个IDE不少亮点,著名的VS插件ReSharper可能不少人都用过,此款IDE就是基于ReSharper开发的,全部ReSharper拥有的特性他都有,另外还加入了Jetbrains家族的强大功能,好比Git操做,Unit Test、Docker集成等等。

来来来,我列举一部分让你们尝尝鲜。先说一下个人使用场景,我通常是作后端API开发还有少许的配套API作的UI,因此偏后端些,可是这个IDE对前端的支持一点也不差。

下载最新版,激活,运行一下:

目前还提供常见的前端模板建立

这是建立的目录

自定义的格式化方式

我最喜欢的一键加入Docker

Jetbrains Rider 更多

只要是Resharper拥有的特性,这个IDE都有,传送门这是最新版特性的介绍,更多的就去看看,强推!

Jetbrains Rider 根据数据库查询结果快速生成DTO类

映像中DTO类的编写一直是各类麻烦,重复又无心义,特别是做为Web API服务的时候,须要提供无数的DTO映射类!

这个痛点能够借助Rider的groovy脚原本快速解决,以下图,我写了两个groovy的脚本,编写脚本很简单,并且能够在脚本中混合使用Java语法~

这两个脚本 Param-Groovy.cs.groovyproto-Groovy.cs.groovy都是我用来生成DTO类的,其中proto使用来生成ProtoBuffer的DTO类

脚本的使用方法,在Rider右侧的数据库栏,选择编辑SQL脚本,简单的select一些数据后,出现以下的结果栏,切换红框中的选项到proto-Groovy.cs.groovy,而后选择一行按Ctrl + C进行复制,而后在代码编辑器中Ctrl + V粘贴出来

这个DTO就生成好了。

依此类推,也能够经过这种自定义脚本的方式,直接根据整个数据库生成POCO类哟!

一下是两个脚本的代码:

Param-Groovy.cs.groovy

SEP = ", "
QUOTE    = "\'"
NEWLINE  = System.getProperty("line.separator")

def record(columns, dataRow) {
    columns.eachWithIndex { item, idx ->
        OUT.append("/// <summary>\n")
        OUT.append("/// \n")
        if (dataRow.value(item) != null) OUT.append("/// eg: ${dataRow.value(item)}\n")
        OUT.append("/// </summary>\n")
        OUT.append("public string " + captureName(item.name()) + " { set; get; } \n\n")
    }
}

ROWS.each { row -> record(COLUMNS, row) }

public static String captureName(String name) {
    return name.substring(0, 1).toUpperCase() + name.substring(1);
}

proto-Groovy.cs.groovy

/*
* Available context bindings:
*  COLUMNS    List<DataColumn>
*  ROWS        Iterable<DataRow>
*  OUT        { append() }
*  FORMATTER  { format(row, col); formatValue(Object, col) }
*  TRANSPOSED  Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
*  DataRow    { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
*  DataColumn  { columnNumber(), name() }
*/

SEP = ", "
QUOTE    = "\'"
NEWLINE  = System.getProperty("line.separator")

def record(columns, dataRow) {
    columns.eachWithIndex { item, idx ->
        OUT.append("/// <summary>\n")
        OUT.append("/// \n")
        if (dataRow.value(item) != null) OUT.append("/// eg: ${dataRow.value(item)}\n")
        OUT.append("/// </summary>\n")
        OUT.append("[ProtoMember(${idx + 1})] \n")
        OUT.append("public string " + captureName(item.name()) + " { set; get; } \n\n")
    }
}

ROWS.each { row -> record(COLUMNS, row) }

public static String captureName(String name) {
    return name.substring(0, 1).toUpperCase() + name.substring(1);
}

最后

Jetbrains家有不少的IDE,你们能够去看看,开发.NET并不是必定要使用VS,去外面的世界看看吧。

相关文章
相关标签/搜索