2017 .NET 開發者須知
筆記-Scott Hanselman 的 2017 .NET 開發者須知
转载http://blog.darkthread.net/post-2017-01-16-dotnet-dev-should-know-2017.aspx
Scott Hanselman 前兩天有篇文章-What .NET Developers ought to know to start in 2017,我的工作(甚至生活)跟 .NET 息息相關,重量級人物的觀點自然不容錯過,整理筆記如下:
前言
- Scott 之前整理過類似的 .NET 須知,結果被大家拿來當作面試時折磨新人的刑具…
- 清單很長,但並不是每則都必須搞懂弄通,應視自己所需以及學習習慣取捨,有些知道名詞即可,有些應該深入了解。
- https://dot.net 是 .NET 技術資源的新入口,首頁有個線上 C# 編譯器可以玩玩。
必備知識
- 新的 .NET 架構,分成 .NET Framework、.NET Core、Xamarin 三種 Runtime,底層是 .NET Standard…
延伸閱讀:.NET Standard 2.0 是什麼?可以吃嗎? - .NET Framework - 用於 Windows 平台
- .NET Core – 可通行於 Windows、Linux、Mac
- Mono for Xamarin – 整合 .NET 與手機原生 API,可開發 iOS 及 Android App
- 主要語言:C#、F#、VB.NET
- 如何開始?
- https://dot.net 下載 .NET Core 以及 Visual Studio Code
- https://docs.microsoft.com 文件入口
- https://github.com/dotnet Open Source 程式碼
- Frameworks
指可使用的 API 集合,例如:.NET 4.6 Framework、.NET Standard 等,有時會以 TFM 表示 - Platforms 平台
如 Windows、Linux、Mac、Android、iOS 等,還會進一步區分 x86、x64。 - TFMs (Target Framework Moniker)
用來表示平台版本的簡稱,例如 net462(.NET 4.6.2)、net35(.NET 3.5)、uap(Universal Windows Platform),指定 TPM 決定可以使用的 API 範圍。 - NuGet
.NET 愈來愈依賴透過 NuGet 下載必要程式庫及核心元件,許多東西不再預先安裝於本機,而是新起專案時才下載,這年頭 .NET 開發者不會 NuGet 恐怕混不下去。
延伸閱讀:還在揮汗徒手安裝程式庫? 試試NuGet吧 - Assembly 組件
.NET 程式編譯後的產出,多以 DLL、EXE 方式存在,是部署、版本管理、重複利用以及權限控管的基本單位。
.NET Core 的編譯結果則是一個 NuGet Package,包含組件以及額外的 Metadata。 - .NET Framework vs. .NET Core
.NET Framework 聚焦於 Windows 平台(桌機、平板、手機、XBOX),.NET Core 則可跨平台。
應該知道
- CLR
Common Language Runtime (CLR),執行 .NET Framework 的虛擬機器元件(for Windows) - CoreCLR
.NET Core 用的 Runtime - Mono
Xamarin 及 Linux 系統用的 .NET Runtime - CoreFX
.NET Core 的 .NET 類別程式庫,部分程式碼與 Mono 共用。 - Roslyn
C# 與 Visual Basic 編譯器,有開放讀、寫、分析程式碼的 API 可供延伸應用。 - GC
.NET 使用記憶體回收機制,免除開發者自行管理記憶體的負擔。延伸閱讀:Fundamentals of garbage collection (GC). - "Managed Code"
指使用 .NET 語言開發的程式,相對另一種是 Unmanaged Code,指用 C/C++/VB/Delphi 寫的程式、ActiveX、COM+元件。 - IL
.NET 編譯結果非機器碼,而是一種中間語言(Intermediate Language),執行時才由 Runtime JIT 編譯成機器語言。
Scott 的比喻:C# 是蘋果,IL 是蘋果醬、JIT 及 CLR 再將它磨成磨成蘋果汁。 - JIT
Just in Time Compiler,即時將 IL 編譯成機器語言。 - .NET Framework 的儲存位置在 C:\Windows\Microsoft.NET,而 .NET Core 在 C:\Program Files\dotnet,在 Mac 則為 /usr/local/share。但 .NET Core 允許把 Runtime 包進程式的 Package 一起部署,如此客戶端不需事先安裝 .NET Core Runtime,只要 xcopy 就可以部署(xcopy-deployable or bin-deployable),這種做法稱為:Self-Contained Application,反之則稱為 Shared Framework Apps。
- async and await
async 與 await 指令可解決執行耗時動作(例如查詢資料庫,呼叫 Web API)程式卡住的問題。 - Portable Class Libraries
一種允許跨平台使用的「最大公約數」性質的共用程式庫,未來建議改用.NET Standard。 - .NET Core
由 .NET runtime、一組 Framework Libraries 以及一組 SDK 工具以及語言編譯器組成,這一切可由.NET Core SDK 取得。
'dotnet' 程式可用於啟動 .NET Core 程式,它會選取並執行適當的 Runtime,提供組件載入原則並啟動程式,SDK 工具也是用相同方式啟動。
錦上添花
- GAC
Global Assembly Cache,完整版 .NET Framework 在 Windows 平台上保存與管理共用程式庫的地方,可使用"gacutil /l"查看清單 - Assembly Loading and Binding
組件載入與繫結的原理 - Profiling (memory usage, GC, etc.)
觀測 C# 或 .NET Core 程式碼執行狀況(記憶體用量、GC頻率等)效能,Visual Studio 有不少內建工具。 - LINQ - Language Integrated Query(編按:我認為依其普遍性應足以列為 .NET 須知)
- Common Type System and Common Language Specification
定義 .NET 通用型別及通用語言規範 - .NET Native
未來 .NET 除了編譯成 IL,還可以編譯成原生機器語言,明顯提升效能及破解防護力。 - .NET Roadmap
微軟制定的 2017 .NET 發展計劃 - "Modern" C# 7
C# 7 值得一看的新特色 - Reactive Extensions
Reactive Extensions (Rx) 是一組使用 Observable Sequence 與 LINQ 式查詢的非同步與事件基礎程式庫,可用來建立複雜的事件基礎程式以及使用 LINQ 語法以非同步方式處理資料流。
2017 .NET 開發者須知的更多相关文章
- ASP.NET MVC 開發心得分享 (21):Routing 觀念與技巧
ASP.NET MVC 預設在 Global.asax 所定義的 RegisterRoutes 方法中可以輕易的定義你希望擁有的網址格式,嚴格上來講這並非 ASP.NET MVC 的專利,而是從 AS ...
- 學習 DT device tree 以 ST 的開發板 STM32F429i-disc1 為例
目標 因為對 device tree 不是很熟悉, 所以就將 device tree, 設為學習目標. 啟動 注意, 這篇隨筆的解說都放在最下面,會標 Explanation_XX,只要搜尋 Expl ...
- Visual Studio 跨平台開發實戰(4) - Xamarin Android 基本控制項介紹 (转帖)
前言 不同於iOS, Xamarin 在Visual Studio中針對Android, 可以直接設計使用者介面. 在本篇教學文章中, 筆者會針對Android的專案目錄結構以及基本控制項進行介紹, ...
- Visual Studio 跨平台開發實戰(2) - Xamarin.iOS 基本控制項介紹 (转帖)
前言 在上一篇文章中, 我們介紹了Xamarin 以及簡單的HelloWorld範例, 這次我們針對iOS的專案目錄架構以及基本控制項進行說明. 包含UIButton,, UISlider, UISw ...
- Visual Studio 跨平台開發實戰(1) - Hello Xamarin! (转帖)
前言 應用程式發展的腳步, 從來沒有停過. 從早期的Windows 應用程式, 到網路時代的web 應用程式, 再到近幾年相當盛行的行動裝置應用程式(Mobile Application), 身為C# ...
- Sharepoint中WebPart開發時註意的問題
1. 怎麼樣在WebPart中使用Sharepoint控件? 要在webpart中使用sharepoint控件必須先引用Microsoft.SharePoint.WebControls命名空間,如你現 ...
- 免安裝、免設定的 Hadoop 開發環境 - cloudera 的 QuickStart VM
cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 ...
- .net批量上傳Csv檔資料應用程序開發總結
應用環境:visual studio 2010開發工具,Database為Sql2008以上版本 最近在生產環境中需要開發一款應用程式,上傳電子檔(.csv)資料至Database 最初方案: 以tx ...
- 開博客了, 因為搞Delphi 開發的關於Delphi學習
開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...
随机推荐
- python3之装饰器
1.装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处 ...
- 浅谈JavaScript的面向对象程序设计(四)
本文继续讲解JavaScript的面向对象程序设计.继承是面向对象语言中的一个基本概念,面向对象语言支持两种继承实现方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.但是在 ...
- PE解析器的编写(一)——总体说明
之前自己学习了PE文件的格式,后来自己写了个PE文件的解析器,这段时间工作上刚好要用到它,老板需要能查看某个exe中加载的dll的一个工具,我在使用之前自己写的这个东西的时候,发现很多东西都忘记了,所 ...
- Django--权限组件
创建组件 需求分析: 创建独立app, rbac ##注意: app创建后需要注册到setting.py中 INSTALLED_APPS = [ 'django.contrib.admin', 'dj ...
- JAVA面向对象的三大特性 封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 优点: 1只能通过规定的方法访问数据. 2隐藏类的实例细节,方便修改和实现. public c ...
- uImage和zImage的区别
1.各种文件的意义 vmlinux 编译出来的最原始的内核文件,未压缩. zImage 是vmlinux经过gzip压缩后的文件. bzImage bz表示“big zImage”,不是用bzi ...
- 进行app性能和安全性测试的重要性
如何让用户感觉App运行速度更快呢,这需要对App进行性能测试.限制App性能的因素按照App的系统结构分为App自身和App需要用到的后台服务. 测试App连接网络的速度 一般采用在模拟Mock环境 ...
- ESLint 使用入门 - 来自推酷
在团队协作中,为避免低级 Bug.产出风格统一的代码,会预先制定编码规范.使用 Lint 工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量. 在以前的项目中,我们选择 JSHint 和 ...
- [51nod1291]Farmer
用单调栈的话不严格的O(n^3)可以轻松艹过去,统计的时候要差分. 可以发现,对于一个单调栈里的元素,从它进栈到出栈都会重复类似的计算..再差分一波后就可以只在出栈的时候计算一下了. 具体的话看代码吧 ...
- c++工程重复编译与重复定义
#ifndef #define #endif防止的是"重复编译",而不是"重复定义"重复编译可能造成重复定义,但重复定义的来源不只有重复编译从代码变成可执行的程 ...