C# 7.0
C#7.0可以在VS17使用,这个版本我下载企业版上传百度云,有需要可以到文章最后去。本文主要:C#7.0带来的新功能out返回值定义Tuples模式匹配ref返回本地值内部函数全部地方可以支持辣么大在表达式扔异常广义异步返回类型数值常量语法C#7.0的功能主要是数据处理,让代码更简洁,让代码性能更高让代码简单这个我觉得不如6.0,性能WR为了Iot做的。C#速度差,垃圾wr就让C#可以直接访问内存,让速度变快,这个下面没有说C#7.0最好的是使用Tuple。虽然之前也有,但是现在版本比较好用。实际抄袭了某脚本。修改大的有Case。模式匹配,可以判断类型,其实这个使用是我们有类a,类b、c继承a,这时使用就比较好,如何使用在下面会说。如果觉得这个功能没有用,可以去Visualstudio按反馈喷如果好奇他是怎么弄,可以查看https://github.com/dotnet/roslynout返回值定义我们以前要使用out总是需要在
Visual Studio Live Share 让结对编程更轻松
在Connect开发者大会上微软宣布在VisualStudio和VisualStudioCode引入LiveShare即时共享功能,让结对编程的开发者能实时看到对方的代码。结对编程通常要求两人坐在一起共享键盘,但这种做法被认为不方便和有侵入性。微软给出的方案是LiveShare,类似字处理器的共享编辑,每一个人能看到另一个人的光标和文本选择,每一个人都能编辑,甚至共享调试。每一个人都可以使用自己熟悉的编程环境,你可以使用VisualStudio,另一个人可以使用VisualStudioCode,操作系统也可以不同。要使用LiveShare,你只需要向你的同事发送一个共享请求,然后他们就可以从自己熟悉的环境连接到你的项目,编辑器和调试器。微软表示将会在未来提供该功能的预览。
全面理解 ASP.NET Core 依赖注入
DI在.NETCore里面被提到了一个非常重要的位置,这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚。另外再介绍一下.NETCore的DI实现以及对实例生命周期的管理(这个是经常面试会问到的问题)。最后再给大家简单介绍一下在控制台以及Mvc下如何使用DI,以及如何把默认的ServiceContainer替换成Autofac。一、什么是依赖注入1.1依赖1.2什么注入为什么反转何为容器二、.NETCoreDI2.1实例的注册2.2实例生命周期之单例2.3实例生命周期之Tranisent2.4实例生命周期之Scoped三、DI在ASP.NETCore中的应用3.1在Startup类中初始化3.2Controller中使用3.3View中使用3.4通过HttpContext来获取四、如何替换其它的Ioc容器一、什么是依赖注入(DenpendencyInjection)这也是个老身常谈的问题,到底依赖注入是什么?为什么要用它?初学者特别容易对控制反转IOC(I
基础技能树-24 结构体
本节内容匿名字段与继承名称遮蔽(成员访问优先级)结构体内存布局匿名字段与继承当一个结构体包含其它类型的时候,它会把原来的类型展开,所以它的内存布局包含了所有展开的结果,展开的是类型基本的结构。名称遮蔽(成员访问优先级)名称遮蔽是很典型的语法糖。go支持这种结构。packagemainimport"fmt"type(filestruct{namestring}logstruct{namestring}datastruct{filelog})funcmain(){d:=data{}//d.name="name"d.file.name="file"d.log.name="log"fmt.Printf("%+v\n",d)}定义了三个结构体,data里面嵌入了file和log结构,但是只给了类型没有给字段的名字,这其实就是一个语法糖,真实写法就是用类型做名字:type(datastruct{filefileloglog})只不过,字段名字和类型相同,所以就忽略掉了,忽略掉的
Do you kown Asp.Net Core -- 配置Kestrel端口
Kestrel介绍在Asp.NetCore中,我们的webapplication其实是运行在Kestrel服务上,它是一个基于libuv开源的跨平台可运行Asp.NetCore的web服务器。在开发阶段,我们可以直接使用Kestrel服务器用来测试,也可以使用IISExpress。在使用IISExpress其实也需要启动一个Kestrel服务器,通过IISExpress反向代理请求到Kestrel,很多时候我更喜欢使用Kestrel,因为可以实时看到log。配置端口在Socket开发中,服务器都会绑定到某个ip某个端口进行监听,等待客户端的连接,然后交换数据,Kestrel同样需要对某个端口进行监听,客户端会请求这个端口然后建立连接进行数据交换。我们说的配置url或者配置端口,其实本质上都是建立对某个端口的监听。配置规则我们知道在Kestrel通过绑定Urls参数实现绑定ip和端口,.NetCore允许我们使用多种方式来实现绑定url,我们先了解下绑定的规则:[http|https]://[ip|
Attribute的妙用
一、何为Attribute下面是微软官方对Attribute的解释:公共语言运行时允许你添加类似关键字的描述声明,叫做Attributes,它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft.NETFramework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。通俗地理解,就是对目标对象(程序集、类、方法等)进行扩展,使得在运行时可以获取到被扩展对象的额外的信息,通过额外的信息来影响目标对象的行为。上面这句话纯粹是个人的理解,如有不妥希望指教。二、使用Attribute现在我有一个需求,创建一个包含三个静态方法的类,如果某个方法被打上了标签,并且标签的Flag是1,那么就执行该方法,否则就不执行。看起来有点像过滤器,那么如何来实现这个小需求呢?首先要创建一个静态类MethodToRun,该类有三个静态方法分别是Run、Walk、Go,代码如下:1publicclassMethodToRun2{3publics
[ASP.NET Core 2.0 前方速报]Core 2.0.3 已经支持引用第三方程序集了
发现问题在将FineUIMvc(支持ASP.NETMVC5.2.3)升级到ASP.NETCore2.0的过程中,我们发现一个奇怪的现象:通过项目引用FineUICore工程一切正常,但是将FineUICore编译后,通过程序集的引用方式就会报错:这就很奇怪了,在折腾了好一阵之后,开始求助于网络。这一找不要紧,大把大把的抱怨扑面而来:这篇文章提到:翻译:您需要将库打包为NuGet包或使用项目的方式引用。技术原因是所有必需的程序集和版本都在编译过程中得到解析,并写入.deps.json文件。加载某个特定程序集时,可能会失败,因为无法找到程序集或其依赖项(或彼此冲突)。这篇文章甚至怀疑微软是否考虑支持程序集的引用方式:问:微软是否让ASP.NETCore应用只支持NuGet包引用,还是说这只是新技术的一个BUG?答:Nuget包当然是添加引用的最好方式,因为他们可以很好与编译发布流程进行整合。正如我所说的那样,前面提到的问题的确是BUG,并且我们计划在将来的补丁版
Asp.Net MVC 中的 Cookie(译)
Cookie随着每次Request和Response在浏览器和服务器之间交换数据。如果一个用户请求服务器上的一个页面,服务器除了返回请求的页面,也返回了一个包含日期和时间的Cookie。这个Cookie存储在用户硬盘上的一个文件夹上。稍后,如果用户再次访问服务器,当用户输入URL时,浏览器会在本地硬盘上查看与该URL相关联的Cookie。如果Cookie存在,浏览器会将Cookie随着请求一起发送。然后,服务器可以读取发送过来的Cookie信息,用户上次访问该站点的日期和时间。您可以使用这些信息向用户显示一条消息,或者检查一个过期日期。Cookie与特定的站点关联Cookie与一个Web站点相关联,而不是特定的页面,因此不管用户请求你服务器的什么页面,浏览器和服务器都会交换cookie信息。浏览器会为每个不同的Web站点分别存储Cookie,保证每个Cookie对应特定的Web站点。Cookie保持会话状态Cookie可以帮助服务器存储访问者的信息。通俗的说,Cookie是保持Web应用程序连续性的一种方式,即会
如何利用合法工具隐藏恶意代码?
主题.Net在现实世界中,恶意软件的作者会设法利用各种技术手段来隐匿自己的非法行踪,从而绕过相应的安全防御措施。其中,一种常用的手段就是将恶意代码隐藏在可信进程的上下文中。一般来说,采用这种隐身技术的恶意软件通常会将自身的代码注入到诸如explorer.exe之类的系统进程中去。此外,还有些样本会采用其他更加有趣的方法,本文中所讨论的恶意软件就是属于这种情况。最近,某些.NET恶意软件样本引起了我们的极大兴趣,因为这些样本使用的是来自Microsoft.NETFramework的可信应用程序InstallUtil.exe(根据Microsoft官方网站的介绍:“该安装程序工具使您得以通过在执行指定程序集中的安装程序组件来安装和卸载服务器资源。此工具与System.Configuration.Install命名空间中的类一起工作。”)。本文介绍的这种技术,最初是由信息安全研究员凯西•史密斯又名subTee(POC)公布的。简单来说,就是利用该控制台实用程序InstallUtil.exe运行恶意的.NET程序集,来绕过程序集的
全新的.NET解释器 - Mono已经到来
Mono通过新的运行代码方式,完善了自己的即时编译器和静态编译器。2001年,Mono项目正式开始,Mono开发团队为.NET指令集编写了一个解释器,用于在Linux上引导一个自托管的.NET开发环境。当时认为解释器只是一个临时工具,可以在建立一个Just-in-Time(JIT)编译器的时候使用它。解释器(mint)和JIT引擎(mono)一直保持同步存在的状态,直到可以将JIT引擎移植到所有支持的平台。当引入泛型时,同时保留解释器和JIT引擎的工程成本变得很高,不再值得,所以去掉了解释器。稍后会介绍.NET代码的全静态编译。这也是引入禁止目标平台生成动态代码的技术。iOS是这方面的主要驱动者,它开启了允许Mono运行在PlayStation和Xbox等游戏机上的大门。全静态编译的主要缺点是:每次更新代码时都必须重新创建一个全新的可执行文件。这是一个缓慢的过程,不适合于实践的互动式发展。例如,一些游戏开发者喜欢在不触发完整的重新编译情况下,调整自己的游戏代码。静态编译使这种情况变得不切实际,所以他们在游戏代码中嵌入脚本语
Visual Studio的调试技巧
调试技巧是衡量程序员水平的一个重要指标.掌握好的调试技巧与工具的使用方法,也是非常重要的.***演示环境:VS2017C#***演示用的代码:publicclassProgram{privatestaticintdata{get;set;}=0;publicstaticvoidMain(string[]argv){data=10;newThread(newThreadStart(T1)){IsBackground=true}.Start();newThread(newThreadStart(T2)){IsBackground=true}.Start();Console.ReadKey(true);}privatestaticintDataA{get;set;}=0;privatestaticintDataB=0;privatestaticvoidT1(){while(true){DataA+=1;Thread.Sleep(1000);}}pr
深入探讨List<>中的一个姿势。
距离上一篇博文,差不多两年了。终于憋出来了一篇。[手动滑稽]List<>是c#中很常见的一种集合形式,近期在阅读c#源码时,发现了一个很有意思的定义:[DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))][DebuggerDisplay("Count={Count}")][Serializable]publicclassList
C#中类型Type的GetMethod方法
摘要:C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例。使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举。C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例。使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举。该方法返回的是MethodInfo类型的实例,获取到了这个实例之后,我们就可以调用并执行该方法了。MethodInfomethod=type.GetMethod(funcName,BindingFlags.IgnoreCase|BindingFlags.Static|BindingFlags.Public);这里要注意,搜索条件枚举,即第2个参数,要包含BindingFlags.Public,否则会返回NULL的。如果是静态的方法,还要设置一个条件BindingFlags.Static。得到了Method
微软将Visual Studio与AI服务整合
在9月份的Ignite会议上,微软公布了一个将VisualStudioCode与其AI服务集成在一起的扩展。在今天(11月15日)的Connect会议上,微软为VisualStudio本身添加了一个能与人工智能服务集成在一起的扩展功能。上述第二个扩展被称为VisualStudioToolsforAI,同时支持微软和第三方深度学习框架。它支持微软认知工具包(MicrosoftCognitiveToolkit,CNTK)、GoogleTensorFlow、Theano、Keras、Caffe2等。微软方面表示,VisualStudioToolsforAI利用了现有的对Python、C/C++/C#的代码支持,并为CognitiveToolkitBrainScript提供额外的支持。VisualStudioToolsforAI和VisualStudioCodeforAI都是微软机器学习套件的一部分——该套件代码代号为“OpenMindStudio”——这是该公司在一年前的官方介
AY写给国人的ASP.NET Core2教程【1/30】
====================www.ayjs.net杨洋wpfui.comayuiayaaronyang=======请不要转载谢谢了。=========安装以下组件:.NETCore2.0.0SDK或更高版本。已安装ASP.NET和Web开发工作负载的VisualStudio201715.3版或更高版本。在VisualStudio中,选择“文件”菜单>“新建”>“项目”点击确定,按下F5http://localhost:port/api/values添加文件夹Models,添加类Student.csay刚刚看到依赖项里面有EFcore了,访问数据库的了,我们新建类,继承它。Microsoft.EntityFrameworkCore.DbContextusingMicrosoft.EntityFrameworkCore;usingSystem;usingSystem.
ASP.NET Core 应用程序Startup类介绍
Startup类配置服务和应用程序的请求管道。Startup类ASP.NETCore应用程序需要一个启动类,按照惯例命名为Startup。在主程序的WebHost生成器(WebHostBuilderExtensions)的UseStartup
记录一次Session偶尔获取不到的解决过程
导读平台下某子系统有密码登录需求,初步考虑用Session,登录后设置Session[key]=value;Session中若某key对应的Session,即Session[key]为null则限制操作。对应所用技术点:Asp.NetMVC&Razor视图引擎,技术点较简单,虽然走了一些弯路,但加深了对Session的理解。一、前台ajax校验输入密码正确性$.ajax({url:"@Url.Action("CheckPwd","Earnings")",type:"post",data:{"pwd":pwd},beforeSend:function(){loadingLayer=layer.load(1,{shade:[0.6,'#fff']});},success:function(data){varresult=JSON.parse(data);if(result.Success){//页面跳转}else{//}},complete:function(XMLHttpRequest,
C# 可空引用类型
可空引用类型是C#8.0计划新增的一个功能,不过已经发布了预览版本,今天我们来体验一下可空引用类型。安装您必须下载VisualStudio201715.5预览版(目前最新发布版本是15.4),下载地址:https://www.visualstudio.com/en-us/news/releasenotes/vs2017-preview-relnotes。安装Roslyn扩展预览版本:下载并解压Roslyn_Nullable_References_Preview.zip[最新版本11/15/17];关闭所有运行的VisualStudio;运行zip根目录中的.\install.bat脚本(如果需要卸载扩展,可以运行.\uninstall.bat脚本);语法与类型在语法上,可为空引用类型与可为空值类型使用的语法是一致的,在类型后面追加?即可。classPerson{publicstringFirstName;publicstring?MiddleName;publicstringLastNam
c# 小小备忘录
一、简述备忘录,相信大家生活中都使用过,比如记笔记、手机备忘录等等,这些都是记录自己灵感时所想、定期内想做的事情,好像跑题了,说说我的备忘录吧,我的备忘录功能上也就是增删改查的操作,另加到时提醒、语音播放内容,很简单吧,但是实用,好了,想看设计点吧。二、设计1、数据库设计数据库用的是SQLite数据库表:Sys_Kind、MemorandumSys_Kind是一个通用字典表,这个对初学者有帮助,如下图:解析:ID不用说了,自增的标识,K_Name:字典名称,K_Parent:父类型标识,就是说如果K_Parent为0,那么它就是一个类型,然后子字典就以它作为父类,这个字段键入父类ID值即可,K_Sort排序就是单个类型的排序,或者你也可以将所有数据作为排序也行,K_AddTime添加时间,K_Desc字典描述,这样可以便于后来的人查看这个是用来干什么的,K_State字典状态,这个呢,可以灵活应用,用来是否显示某个字典或者其他多状态都可以,K_Code字典代码值,这个就很重要了,这个就用作字典的值,很多人或许会问,为什
TFS在项目中DevOps落地进程(下)
紧接上篇TFS在项目中Devops落地进程(上)再接着说TFS相关之前先插入一个番外篇,虽然跟TFS关系不大但跟DevOps关系很大,觉得有必要在此乱入一下。番外篇--监控之ApplicationInsights我们之前并没有任何监控类产品(我指的是应用程序级别的),发生任何异常都是往数据库的表里insert个错误日志,all系统共用同一张错误表。这其实意味着我们当时的系统是:系统异常基本不关注(线上数据库开发肯定没法查对吧),关注的时候肯定都出事了,对自己负责的系统的运行状态基本不了解,什么性能之类东西纯粹靠猜。然后我就希望我们能有办法获取到我们系统的各种状态,而此时在VS2015的时候整合在VS里的applicationinsights引起了我的关注。简要介绍下applicationinsights,是微软基于azure所推出的一款SAAS性质的APM(ApplicationPerformanceManagement,应用程序性能管理)服务,本人不会详细介绍这个,详情可参阅官方文档。然后也感谢我大