如何在Visual Studio 2017中使用C# 7+语法
前言
之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不喜勿喷,或许对您有帮助。
在Visual Studio 2017配置支持C# 7+语法
心想都VS2017了肯定是支持C# 7+语法,然后接着将控制台程序修改为异步,然后告知于我不行,尼玛这不是扯淡了么,如下:
public class Program { public static async Task Main(string[] args) { using (var context = new EFCoreDbContext()) { var blog = await context.Blogs.FindAsync(3); blog.Name = "Jeffcky"; var result = await context.SaveChangesAsync(); } Console.ReadKey(); } }
然后得知.NET Framework 4.7可以使用C# 7语法,心想难道是没装.NET Framework 4.7么,于是乎到如下地址下载.NET Framework 4.7(https://www.microsoft.com/zh-CN/download/details.aspx?id=55170),结果一安装,它告诉我安装了或更高版本:
然后一查找资料发现在Visual Studio 2017 Update 3就支持C# 7语法,那我现在Visual Studio 2017版本都已经超过这版本不知道多少了,然后一看恍然大悟:
好了,到了这里我的VS 2017已经支持C# 7语法了,看来是缺少什么设置了,那就看如下方案吧。
(1)右键项目解决方案点击【属性】。
(2)点击左侧Tab中的【生成】,出来的界面右下角有个【高级】点击进去,如下:
原来是使用语言版本是最新主要版本【默认】,那不应该是最高版本,打开下拉列表,选择我们想要的版本吧,就可以愉快的玩耍了,如下:
或者我们手动编辑以.csproj的项目文件,找到如下内容:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PlatformTarget>AnyCPU</PlatformTarget> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Debug\</OutputPath> <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <LangVersion>default</LangVersion> </PropertyGroup>
将如上LangVersion修改我们对应的版本如:<LangVersion>7.2</LangVersion>保存,然后生成解决方案就好使了。
总结
理论上VS 2017不是应该使用最高C#语法版本么,但事实不是如此,所以如果您遇到这个问题,首先请确保您是否安装了.NET Framework 4.7,如果安装了就按照上述方法进行即可在控制台使用异步方法以及对应C# 7+语法。可能是我知道的太少,写出来或许对不知道的童鞋有些许帮助,早就知道的大佬们就跳过吧,我们下节再会。
构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构
本篇承接上篇内容,如果你不小心点击进来,建议重新从第一篇开始完整阅读。
一、BitAdminCore框架简介
从前篇论述我们知道,我们接下来将要去做一个管理系统的框架。
BitAdminCore框架是一个定位于后台管理系统的快速开发框架。项目源码地址:https://github.com/chenyinxin/cookiecutter-bitadmin-core
后续篇章将逐步分解整个框架的完成过程。
二、框架解决什么问题
上篇已经提出了框架需要解决的几大问题,在这里一一作答:
我们的框架面向对象是谁?
答:管理应用系统的初级或中级开发人员。
他们平时都会遇到什么共通的问题?
答:快速上线。各种技术问题。
我们的框架需要解决他们哪些问题?是否所有问题都需要解决?
答:不能解决所有问题。事实上,框架并不能解决开发人员的问题,解决的是项目的问题,不管开发框架怎么先进,开发人员每天工作时间都不会变,工作过程遇到的问题数量也不会变,变的是相同时间内能完成的功能数。框架解决的是不同项目中,开发人员遇到的相同问题,把它们形成一套解决方案,固化代码,在下个项目时,它便不再是问题。
例如:A项目需要登录功能,于是程序员用2天开发了一个登录功能,还有一堆bug。当A项目开发完成后,我们发现B项目也会用到登录功能,整一个叫框架的东西,里面只有登录功能。当B项目来的时候,我们只需要将框架代码应用进去,登录功能便已经完成。此过程可能只需要5分钟。请问,这有没有解决程序员的问题?答案是没有,项目经理也知道程序员只需要5分钟,不会给他分配2天时间。
我们的框架需要包含哪些模块?为什么需要包含这些模块?
答:上述示例已经明确说明,一个框架需要包含的模块。框架需要哪些模块,是由未来的项目决定的,也即公司的业务战略决定,而非架构师。架构师只是把它落实而已。
我们提供什么样的开发模式,可以让开发人员更快速解决问题?
答:代码可读性。重复代码不需要开发。
在实际生产中遇到的问题,架构师在理想状态下设计的要多得多,面对众多的初级开发人员,代码可读性应该作为架构的第一选项,A人员开发的代码如何在B那里快速看得懂。
所以,作者个人反对各种使用接口、调用来调用去的方式,以展示个人的技术有多高超。
我们提倡直接、暴力。让代码架构看起来像初级工程师写的直接简单。
三、BitAdminCore定位
BitAdminCore定位原理上述已经阐述。BitAdminCore起码于作者工作经历,十几年不变的管理软件开发,以前也接触使用过不同框架,各有优劣。以前net、后来使用java、再后来netcore出来之后,果断转移到netcore。
选择netcore是对比选择的结果,C#的语言优势这个不用细说,前些年,由于android以及开源趋势没有跟上,net处于下风,但时间推到2018年,随着微软战略的云化以及开源化,还有安卓进入中晚年,单从技术层面netcore对比java已经占上风,这个人使用两种语言对比后认为,但是生态仍需时日。
作为应用开发人员,省时省力才是关键,管它什么语言。所以,坚定不移选择走netcore路线,包括公司及个人影响下的团队。
BitAdminCore定位于”为个人周边团队提供管理类项目快速开发能力支撑“,同时,适应时代发展,进行开源分享。
四、BitAdminCore架构原则
个人观点,软件行业是全世界最先实现共产主义的行业。
事实上,我们每天都在免费使用别人花了很大力气和成本开发出来的软件,这在传统生产行业是不可能的事。而且免费趋势越来越火。
在这样的社会条件下,BitAdminCore框架跟随大队,一是开源,二是利用开源。目标是项目开发最优的解决方案。
五、BitAdminCore架构
基于以上提出的一些原则:可读性优先、开源、快速开发的特点。我们进一步设计我们的框架。
首先是技术选择和评判:
1、基于通用技术框架包括:html5,css3,js,Jquery3,boostrap3
解释:a、只要是个写程序的,以上技术不可能不会。b、boostrap4变动太大,个人同事都熟悉boostrap3,短期内学习成本高。
2、抛弃netcore默认的PageModel实现模式,选择静态页面+webapi模式。理由:一是太复杂需要学习成本,二是是可移植性差,三是保持所有开发模式一致。
解释:a、前端技术均需要掌握并能达到开发目的,再花成本学习一个更小众的应用没必要。b、框架如果想移植到java,包含太多net特性。c、开发web、app、weixin等客户端保持相同的开发模式,减少学习成本。
3、NetCore.All这个就不解释了,自己去看引用包结构。
4、sqlserver,理由:之前部分代码是sqlserver实现,直接迁移过去,最近也在考虑mysql版本。
解释:除非客户有特殊要求,不管语言或数据库,都是开发的人说了算,既然熟哪个就用哪个。
5、ef与sql混合。理由:长期实践结果,判断依据可读性优先。
解释:在长期的开发工作中,发现ef对于复杂的查询实现,可读性非常差,调试极度麻烦。我们把单表操作用ef,而多表操作全部使用sql实现。
6、AdminLTE后端管理界面模板。理由:随便选一个。
以上就是整个框架的底层技术选择。
本篇介绍到此,框架功能规划原则上面已经提及,下一篇继续介绍框架的功能规划选择。
构建NetCore应用框架之实战篇系列
构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架
一、系列简述
本篇起,将通过一系列文章,去描述如何构建一个应用开发框架,并以作者开发的框架为例,逐个点展开分析,如何从零开始,构建自己的开发框架。
本系列文章的目的,是带领有一编程经验的人,通过动手,初步完成自己的框架,更重要的是,获得构建框架的系统性思维模式。毕竟框架会过时,思维不会过时。
希望自己在技术有所深度,那么,主动、坚持、思考、行动,是四个最基本的要素。
二、作者简述
个人有十多年的软件工程工作经历,工作涉及软件工程的所有领域(需求策划、需求挖掘、需求分析、系统架构、功能设计,编码实现、系统测试、上线运维),对每个领域均有一定实践,不是每个领域最好的,但是应该是涉及领域最广泛的。
做过项目管理工作,实践过包括策划,沟通,计划,风险管理、过程监控等各专业管理域。
做过团队管理工作,实践过招聘,培训,考核,领导工作等企业组织域。
带领团队完成两次CMMI认证,对CMMI有一定认识,过程中积累学习了很多系统性思维,对软件企业整体运作有了更深刻理解。
优势是懂得各领域如何平衡,劣势当然是啥都不精通。
经过沉淀,最终对软件工程保持高度兴趣,热衷于知识输出和思想输出。
能够接受来自各方批评,但绝不改正。
三、什么是框架
言归正传,传递知识才是我们真正要做的事。
什么是框架,我们先来看一下百度百科的定义:框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。
这个定义很清晰,框架包含两个含义,一个约束,二是支撑。更详细内容可以看百度百科,个人觉得解释很到位。去看看先
通过阅读,结合我们工作领域,我们知道我们定义的框架,叫软件开发框架。
比如:net core是一个框架,ef是一个框架,大家都叫框架,又好像有关联,有交叉,到底我们听谁的?
我们发现,软件开发框架,仍然是一个抽象的概念,当我们需要去落实一个具体的框架时,需要聚焦一个更细的问题。
net core是一个框架没错,它是定位在哪方面的框架,ef是一个框架没错,它是定位在哪方面的框架?
作者一直从事管理软件工作,所以,我定义的框架,就是指如何完成管理应用方面的框架。事实上,这种框架,几乎每个软件公司都有一个,每个程序员也梦想自己都能有一个自己的。
四、如何设计一个框架
我们已经知道框架的定义,那么,接下来就是行动起来。
管理系统开发过程,对程序员来说,属称增删改查。
站在设计的角度,我们对不同的需求进行抽象之后,发现管理系统需求包括表单、流程、报表。还有外部接口。
站在需求的角度,我们发现管理需求就是基础配置,业务流程,业务报表。当然,还有系统对接。
抽象到此,我们的框架要解决的问题已经足够清晰了,快速完成表单增删查改,快速完成流程驱动,快速完成报表。
接下来要做的是把框架的概念套进去:约束、支撑。
约束:我们需要用什么约定,去完成我们的开发,只有在这样的约定之下,我们才能达到快速开发的目的。
支撑:我们需要支撑哪些内容,完成这些支撑,我们对应用的快速开发便能呈现出有效性。
通过套用框架的概念,我们又可以产生新的问题:
我们的框架面向对象是谁?
他们平时都会遇到什么共通的问题?
我们的框架需要解决他们哪些问题?是否所有问题都需要解决?
我们的框架需要包含哪些模块?为什么需要包含这些模块?
我们提供什么样的开发模式,可以让开发人员更快速解决问题?
正确回答以上问题,那么,我们的框架长什么样子,实际上就已经有了整体架构了。
在实际操作过程中,不同人,不同经验,会提出不同的解决方法,每个人的方法,看起来都会很有道理,我们不讨论对错,我们认为只要能解决问题的方法就是对的。
个人比较擅长用系统性思维进行分析,也仅仅是代表解决问题的一种方式。
系统思维最基本就是分层,先定位好每个层次要解决的问题,再细分,哪些问题哪些方法,属于哪个层次,是否纳入,如何纳入。
事实上,对每一个细节的评判,都来源于我们日常的积累和认知,个人认为扩张自己的知识域,是能够客观评估问题的唯一方法。
本篇作为引入篇,也就写到这里,任何问题都可以无限展开,以问题作为切入,引起思考,个人认为已经足够了。
下篇将介绍BitAdminCore框架定位及架构,通过介绍进一步让大家了解我们如何思考的选择。
NetCore入门篇:(十二)在IIS中部署Net Core程序
一、简介
微软已经为net在iis中的部署提供了良好的支持,在IIS中部署NetCore是一件很容易的事。
二、在IIS中部署Net Core程序
1、微软官方文档有详细说明。进入
2、如果你已经熟悉iis部署过程,实际上可以把部署简化成两个步骤:一是安装捆绑包(安装过程就不用说了),二是创建站点。
3、创建站点时,站点应用程序池选择"无托管代码"即可(其它过程就不介绍了)。
链接进入后到以下章节
点击进去后,到以下章节
安装过程就不用说了,创建站点如下一个差异。
三、更新Net Core版本
1、有时候,我们会手痒更新我们的netcore版本,导致iis安装的版本较旧,而程序版本较新,更新后站点会出错。
2、这时候,我们只需要更新Runtime就可以了。下载地址
开发的版本
更新Runtime