在Linux开发.NET——拜拜了Win10

我是一个有多年开发经验的.NET程序员。最近,我决定使用*NIX系统来开发.NET程序,虽然看起来有些激进,但是我可以说,这是我做过最好的决定了。

事情的起因是这样的,上周星期五(十月14日),我正在办公室处理一些东西,突然Windows弹出一个窗口说:“20分钟之后我们将更新Windows,在这之前你什么都做不了。”

15分钟之后,我的笔记本已经关机了。然后过了两三分钟,就开始了长达一个小时的更新过程,浪费了我的工作时间。所以,去你的Windows吧。

然而,这并不是纯粹因为一时的感情用事做出的决定。老实说,当初我是想买台MacBook来着,但是我们的项目需要做触屏产品,所以我就买了联想的Yoga 900。不过我想也许苹果有一天会出一台带触屏的笔记本,然后说这是笔记本的“革命”,这又是另外一个故事了。

开发过两个涉及到.NET Core的项目之后,我工作用的笔记本基本上和所有微软系统的东西绝缘了,然后安装了了Linux Mint。

为什么是Mint呢?不知道,网上有人推荐说,如果你是Linux新手的话(我不是纯粹的新手,在美好的大学时代,我还学了几个命令),应该使用Mint而不是Ubuntu(这里别太较真了兄弟),所以我就用了Mint。

安装新系统之前,我必须关闭笔记本的UEFI,重新分区,格式化。对我来说需要花些时间搞明白这些操作,不过还不是太难。

安装很快,过了几分钟,我就可以登录我的新系统了。

接下来我的首要任务是安装.NET Core框架,非常简单,没什么好说的。但是NET Core preview library有些依赖存在问题,我Google解决了这个问题。然后我的框架就可以工作了,我准备build一个应用。它“工作”了,加引号是因为引用System.Drawingproject.json出现了问题。

虽然程序可以正确运行,但是它抛出了找不到gdiplus.dll异常,情理之中,因为这是Windows组件,在Linux中找不到是正常的。

但是这里我想表达的意思是,这里.NET Core应用并没有崩溃。想象一下我把它部署到Linux服务器会发生什么——看起来一切正常,但是实际上却不是。这里要注意一下。

安装了一些必要的服务和应用(如Git, MongoDB, Redis, Slack, Skype等)之后。我要做出一个决定了:用什么来写代码。我是Visual Studio Code的忠实粉丝——我写JavaScript几乎全靠它(以及除了写C#之外所有的工作),但是,如果要保证生产率的话,我觉得还是Resharper比较好。

还有个叫做OmniSharp(支持Atom,Brackets,Sublime甚至Vim),它也兼容VS Code。但这毕竟不是Visual Studio + Resharper,也基本满足我的需求了,比如通过文件查找,通过method/type查找,重命名,跳转到定义处或显示引用等。

我也尝试了Project Rider项目,但是运气不太好。项目可以载入,但是内置的Resharper有错误,我不能build我的项目(可以写代码,不能工作)。

不过我相信如果JetBrains修复了这些bug的话,这会是.NET最棒的跨平台IDE(迫不及待了!)最后一点,没有什么是一个bash脚本解决不了的,所以项目的自动化(运行、测试等)不是问题。

最后要讲的东西是Docker。之前我也计划过学习Docker,但是因为没有地方用到,所以就不了了之了。现在,我们正在使用Microservices + CQRS模式开发,所以用Docker的镜像和容器应该是个不错的主意。

这也是在软件开发中使用Linux而不是Windows的一个优点。Linux是运行Docker的纯天然容器,如果它能在我的机器上运行,我几乎100%地肯定它能在远程服务器上运行。

我也可以在Windows 10上安装Docker,但是需要VirtualBox的HyperV。上次我试图编译它的时候,因为系统变量$PATH的问题遇到了错误。所以在Windows中使用Docker还是挺麻烦的。

对了,我忘了提为什么我的应用不能在Linux中运行了——因为这是在Windows上编译的,aurelia.json文件的路径以”\”结尾,必须将其替换成”/”才能工作(在Windows中也有同样的问题。)

我已经无法形容*NIX系统的bash有多么棒了,用脚本设置NGINX的SSL、签名、反向代理和重定向简直易如反掌。

最后,我不是说Windows不适合做软件开发。比如,[Visual Studio]在短期内可能不会有竞争对手。我的观点是,如果你不是必须使用某个非跨平台系统(通常都是指Windows)的话,也许你可以试一下其它环境。尝试新的东西,对强化技术和开拓视野来说总是好的。

原文链接:http://geek.csdn.net/news/detail/108540


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20个非常有用的Java程序片段

转载自 20个非常有用的Java程序片段下面是20个非常有用的Java程序片段,希望能对你有用。 1. 字符串有整型的相互转换String a String.valueOf(2); //integer to numeric string int i Integer.parseInt(a); //numeric string to an int 2. 向文件末尾添加内…

从工程转向管理,访谈Github公司的Phil Haack

在本次播客中,QCon旧金山大会、 伦敦大会和纽约大会的主席Wes Reisz访谈了GitHub的工程主管Phil Haack,Haack在Github的工作聚焦于实现将软件推送到开发人员的桌面,当前正致力于发布GitHub Desktop这样的软件。GitHub Desktop是用于Visual St…

怎样往阿里云windows服务器传文件

怎样往阿里云windows服务器传文件 2017年12月05日 21:28:56 阿杜_ardo 阅读数 9169 1、在本地电脑上,快捷键“WINR"在“运行”中输入“MSTSC”,点击确定。 2、在“远程桌面连接”框框点击“选项”展开。(计算机中输入阿里云服务器的IP地…

Hibernate基本概念

--用户解锁alter user scott account unlock;一个项目对应一个表空间oracle:--创建表空间--创建用户create user 用户名idendified by 密码default tablespace 表空间名-- 授权grant 权限(角色) to 用户--建表--增删改查--存储过程对象 ->jdbc->数据库(表…

手机app 服务器 网页同步,手机app接入云服务器

手机app接入云服务器 内容精选换一换通过内网连接云手机实例时,需要在租户VPC中创建一台弹性云服务器,作为连接云手机的跳板机器。若创建云手机服务器时未使用自定义网络,还需在云手机租户的VPC和服务器所在VPC之间建立对等连接,如…

Java中的OutOfMemoryError

转载自 Java中的OutOfMemoryError引子&#xff1a;今天在<Sharding-JDBC官方群>里有个哥们称“不连sjdbc不会把内存吃光&#xff0c;连sjdbc跑一会就把内存吃光”&#xff0c;倍感诧异&#xff0c;我们已经用sj很久了&#xff0c;一直未发现sj吃内存的情况&#xff0c;遂…

沉沦17年,这位昔日科技霸主、最值钱企业,终于回来了……

1999年12月30日&#xff0c;这是微软最高光的时刻。当天其股价创出历史最高位59.97美元/股&#xff0c;市值达到了6130亿美元&#xff0c;是有史以来最值钱的公司——直至13年后&#xff0c;苹果公司的市值才超越这一纪录。 ▲微软股价 处在新千年之交&#xff0c;意气风发的微…

mysql5.5安装配置 在阿里云服务器上 本地navicat连接

MySQL 5.5安装配置教程. 2018年03月20日 19:18:49 沸点数据 阅读数 18046 1、官网下载MySQL 5.5。 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.5.html#downloads 2、安装MySQL5.5 注意&#xff1a;安装之前&#xff0c;请关闭杀毒软件。 &#xff08;1…

Hibernate基本概念 (2)

框架&#xff1a;1.一个应用程序的半成品2.提供了一系列可以重用的API3.能开发效率更高&#xff0c;性能更好的项目Hibernate:持久化&#xff08;jdbc&#xff09; ORM( 对象 关系 映射)hibernate环境搭建1.导包&#xff1a;核心包&#xff0c;必须包&#xff0c;数据驱动包2…

通过网页查看服务器算法,java分析html算法(java网页蜘蛛算法示例)

遇到复杂而繁琐的html页面大家都望而却步。因为很难获取到相应的数据。最古老的办法的是尝试用正则表达式&#xff0c;估计那么繁琐的东西得不偿失&#xff0c;浪费我们宝贵的时间。第二个办法用开源组织htmlparser的包&#xff0c;这个是一个比较老的项目&#xff0c;但是效果…

JVM 调优系列之监控工具

转载自 JVM 调优系列之监控工具 摘要: 项目部署线上之后&#xff0c;我们该如何基于监控工具来快速定位问题.... 通过上一篇的jvm垃圾回收知识&#xff0c;我们了解了jvm对内存分配以及垃圾回收是怎么来处理的。理论是指导实践的工具&#xff0c;有了理论指导&#xff0c;定位…

写给开发者:记录日志的10个建议

尽管在写这篇博文的时候&#xff0c;我是在负责运维工作&#xff0c;不过本文主要是写给开发者的。 对我来说&#xff0c;明白如何记录日志和记录什么&#xff0c;是软件工程师必须明了的最艰巨的任务之一。之所以这么说&#xff0c;是因为这项任务与预测&#xff08;divinatio…

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误 2018年07月23日 16:55:42 犹抱琵琶半遮面 阅读数 29677 &#xff01;&#xff01;&#xff01;此类问题出现的原因是——不细心 一般的原因 Mapper interface和xml文件的定义对应…

Java 9 中的 GC 调优基础

转载自 Java 9 中的 GC 调优基础在经过了几次跳票之后&#xff0c;Java 9终于在原计划日期的整整一年之后发布了正式版。Java 9引入了很多新的特性&#xff0c;除了闪瞎眼的Module System和REPL&#xff0c;最重要的变化我认为是默认GC&#xff08;Garbage Collector&#xf…

mysql删除索引 增加索引

使用ALTER TABLE语句创建索引alter table table_name add index index_name (column_list) ; alter table table_name add unique (column_list) ; alter table table_name add primary key (column_list) ;删除索引drop index index_name on table_name ; alter table table_n…

Hibernate基本概念 (3)

一、hibernate配置&#xff1a;1.导jar包2.配置主文件a。数据库连接 url 驱动 用户名&#xff0c;密码&#xff0c;方言b。相关 显示sql&#xff0c;sql格式化c。映射文件3.映射文件表到实体 字段到属性查询&#xff1a;select dname from Dept d;参数&#xff1a;1.按位置&…

全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

在开发涉及到数据库的程序时&#xff0c;常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况&#xff0c;这时就需要进行数据库迁移。实现数据库迁移有很多种办法&#xff0c;从手动管理各个版本的ddl脚本&#xff0c;到实现自己的migrator&#xff0c;或是使用…

ThreadLocal 内存泄露的实例分析

转载自 ThreadLocal 内存泄露的实例分析前言 昨天分享了一篇深入分析 ThreadLocal 内存泄漏问题是从理论上分析ThreadLocal的内存泄漏问题&#xff0c;这一篇文章我们来分析一下实际的内存泄漏案例。分析问题的过程比结果更重要&#xff0c;理论结合实际才能彻底分析出内存泄…

ZKWeb网站框架的动态编译的实现原理

ZKWeb网站框架是一个自主开发的网页框架&#xff0c;实现了动态插件和自动编译功能。ZKWeb把一个文件夹当成是一个插件&#xff0c;无需使用csproj或xproj等形式的项目文件管理&#xff0c;并且支持修改插件代码后自动重新编译加载。 下面将说明ZKWeb如何实现这个功能&#xff…

Hibernate基本概念 (4)

一、缓存&#xff1a;提高性能1.一级缓存&#xff1a;session级别 一个session共享2.二级缓存&#xff1a;进程或群集级别 不同session可以共享步骤&#xff1a;1.导jar包 2.添加xml放到src3.配置hibernate.cfg.xmla.开启二级缓存b。缓存管理类4.配置持久化类使用二级缓存 3…