ASP.NET 5 by 保哥
完整投影片在這裡
- ASP.NET 5為新一台ASP.NET,跨平台,Open Source,適合雲端也可在本地跑(未來還會支援Windows Server 2016 Nano Server、Docker),模組化,全新架構
- 為什麼要砍掉重練?
- ASP.NET 1.0已有15年歷史,包袱太重
- 擺脫System.Web.dll,採模組化載入,減少資源使用,雲端執行較省成本(費用與CPU/RAM用量成正比)
- 可與Apache、Self-Host其他HTTP管道整合,應用範圍變廣
- .NET Execution Environment(DNX) ,新一代.NET Runtime,跨Win/Mac/Linux
- 版本選擇:
- .NET Framework(CLR), 元件完整,發行更新週期長, Windows Only。
- .NET Core(CoreCLR) 為CLR子集合,元件較少但跨平台。CoreFX透過NuGet下載,有用到才載入,Windows版已好, Linux/OSX仍在開發中
- Mono: 跟CLR相容,直接丟.EXE就可以跑,非官方解決方案
- ASP.NET5 Beta8起(10/5 Release, RC 11月)不再加功能,只加文件
- 開發伺服器:WebListener(Win Only,將來可能被淘汰)、Kestrel(跨平台)
還是可以跑在IIS,同時支援傳統與新一代的Pipeline,故HttpHandler、HttpModule可以繼續用 - 示範:
- 使用CMDER
- yo aspnet 建立ASP.NET 5專案樣板(此做法跨平台,但便利性不如VS2015)
- dnu restore 要求NuGet下載用到的套件
- dnu build 建置專案
- code . 用Visual Studio Code開啟專案
- dnx web 執行專案
- 開發環境的變革
- 改檔案後不需手動建置(背景偵測檔案改變就觸發編譯,缺點:難以掌握檔案何時Build完)
- 前端後端分工整合:LESS、Sass、Typescrpit、Bootstrap、KO、NG、ReactJS、Gulp, Grunt, npm, Bower, Yeoman... 延伸閱讀 Gulp, Bower, Grunt是什麼鬼啦?
- 有些指令如Environment.Machine使用時要小心,DNX 4.5可用、DNX Core 5.0不行,若
project.json frameworks指定兩種平台要通用,將無法編譯。應改為二者共通的替代做法,或移除DNX Core 5.0 - ASP.NET專案結構
- .sln仍在
- nuget.config指定packageSource(可切換來源改抓新版)
- global.json projects指定目錄下有src及test兩個目錄,找到的專案將自動匯入sln,但已匯入的專案不會因修改projects消失
- .xproj(取代.csproj),採用負向表列,排除的才要註明,跟csproj一樣可用於MSBuild。
自動掃瞄檔案匯入專案,缺點是會不斷掃瞄,若機器不夠力會讓你想哭(註:我不怎麼喜歡這個點子,但這似是前端開發工具的主流玩法) - 大部分專案設定移入project.json,內容與Gulp共用(Node.js)
- project.json結構
- webroot: 靜態檔案的根目錄,預設值是wwwroot,裡面都是不需要編譯的內容
- userScrectId: 不能重覆,開發階段使用
- version: 1.0.0.-* 版號
- dependecies: 參照的套件、模組(都來自NuGet)
- commands:
"web"/"kestrel",定義命令。"ef": "EntityFramework.Commands" -> dnx ef --blah foo.bar - frameworks: 平台對象
- exclude: 不包含的資料夾wwwroot, node_modules, bower_commpents,不編譯不處理
- publishExclude: "node_modules","bower_components", "**.xproj", "**.user", "**.vspscc"
- scripts: "pubish":["npm install", "bower install", "gulp clean", "gulp "min"]
- gulpfile.js <== css, js壓縮程序,用Node.js跑
- config.js Connection String、AppSettings...
wwwroot下還是有web.config,但只給IIS用,非IIS時無視 - Startup.cs 很重要,取代global.asa的角色
- 建構式
if (env.IsDevelopment()) builder.AddUserScrets() <= 連線字串或Path,各開發機不同,執行時用screts.json覆寫config.json
另一招,用OS環境變數覆寫config.json的設定 - ConfigureService() 服務設定
註冊EF、SQL元件、DbContext、FB/MSAccount登入整合 - Configure()相當於Application_Start
ASP.NET如何執行,開BrowserLink()、ErroPage()、Use*/UseMvc(),跟Pipeline有關,順序很重要 - 觀念解析(與傳統ASP.NET差異很大)
- 以服務為中心,用DI注入服務元件,有不同生命週期
*services.AddSingleton<IMyApp, MyApp>()
*services.AddScoped<IMyApp, MyApp>()
*services.AddTransient<IMyApp, MyApp>() - Middleware層層套用的觀念釐清
- loggerFramework.AddConsole()第一順位,保證大家都能用
- UseStaticFiles()在UseIdentity()之前,靜態檔案不需驗證就能存取
- 若UserDirectoryBrower()在UseMvc()之前,MVC Routing就失效了
註:綜合之前搞Hackpad小玩過ASP.NET 5的經驗,它還很新很嫩,元件跟文件還有不少缺口,現階段嚐鮮即可,假以時日方可委以重任。
Microsoft Edge by Eric
- 瀏覽器發展時間軸,IE6-IE7時代幾無敵手,IE8時Chrome出現,IE6/7/8變臭(說好不提IE6/7/8 XD)
- IE11之後將持續更新改進,但不會有IE12,IE13了
- 裝置愈來愈多元化:Mobile/PC/XBox/Surface Hub/HoloLens/Wearables+IoT
- Why Edge?
- IE包袱太沈重,原本為Windows量身打造,跟OS綁太緊,作業系統不升級IE就不能升級。
- 為保留相容模式必須付出龐大代價,加了新功能舊版邏輯卻不能丟,程式愈來愈肥
- IE只為桌面設計,硬體需求、連線狀態思維不同
- Edge啟動畫面預設呈現MSN新聞、氣象(建議內容)、最常瀏覽網站(Top Sites)
- Demo: 開啟INSIDE網站,進入閱讀模式(其他瀏覽器也有),頁面只留內容,Banner/側邊選單消失。前題是網頁需正確使用HTML5標籤<content><article><aside><section><h3><h4>...。另外,亦可加入閱讀清單(READING LIST),可離線閱覽
- Edge內建筆記功能,加入閱讀清單仍能保有筆記內容,可分享到其他APP
- 無縫體驗,XBox/HoloLens上都有Edge
- IE11相容模式
企業情境管控:企業內網預設啟用企業模式
若網頁需要整合ActiveX(例如:Web ATM需讀卡機):彈出提示開IE11,UI可勾選記憶起來以後一律用IE11開 - 不再支援原生元件(ActiveX...)
- Edge是UWP App,可跨裝置,透過市集升級
- 相容性 vs 互通性
用戶希望用了十幾年的網站跟用HTML5的網站都要能繼續用 - 有很多網站開發時只針對行動Safari,用FF/IE看就慘不忍睹,Edge開啟接近iPhone所得
當年IE Only,如今iOS Only,都一樣糟糕 - Edge的功能採用投票制決定採納與否及開發順序 https://status.modern.ie
- 當代前端攻城師須知:參考
- 很酷的展示:開Visual Studio UWP App專案,用EntryPoint,ContentUri指向網站,當場包成UWP App。執行於Hosted Web,透過Windows物件可以存取相機、使用者通訊錄等資源
Windows.UI.Popups.MessagesDialog(...) 顯示對話框
Windows.ApplicationModel.Appointments.Add... 加入行事曆 - Edge 64bit Only(無ActiveX相容的必要性),唯一保留的二進位擴充套件只有Flash