Más contenido relacionado La actualidad más candente (20) Similar a 玩轉 .NET Interactive Notebooks 一次就上手 (20) 玩轉 .NET Interactive Notebooks 一次就上手2. Poy Chang
任職於全美 100 大私人企業,負責企業內部 IT 解決方案設計與開發,
專注於 Azure、.NET 等技術研究
✓ STUDY4 / Azure Taiwan 社群核心成員
✓ Microsoft MVP 微軟最有價值專家
✓ 2021 線上 DevDays Asia 講師
✓ 2020 台北 .NET Conf 總召 / 講師
✓ 2019 台北 .NET Conf 總召
✓ 2019 廣州 Global Azure Bootcamp 講師
✓ 2019 台北 Insider Dev Tour 講師
✓ 2019 宜蘭 Angular TW Conf 講師
s.poychang.net/blog
s.poychang.net/github
s.poychang.net/fb
s.poychang.net/twitter
s.poychang.net/linkedin
5. Try .NET
✓ 基於 .NET 的嵌入式的程式碼執行器
✓ 提供網頁介面來執行 .NET 程式碼
• 使用 Blazor 和 Web Assembly 技術
✓ 可安裝成 dotnet CLI 全域工具,提供
離線執行環境
✓ Microsoft Docs 線上學習支援大量使
用此技術,讓 .NET 學習者能閱讀文件
的同時,直接在網頁上執行程式碼
https://try.dot.net/
dotnet tool install --global Microsoft.dotnet-try
6. Try .NET
✓ 基於 .NET 的嵌入式的程式碼執行器
✓ 提供網頁介面來執行 .NET 程式碼
• 使用 Blazor 和 Web Assembly 技術
✓ 可安裝成 dotnet CLI 全域工具,提供
離線執行環境
✓ Microsoft Docs 線上學習支援大量使
用此技術,讓 .NET 學習者能閱讀文件
的同時,直接在網頁上執行程式碼
https://github.com/dotnet/try/blob/main/DotNetTryLocal.md
dotnet tool install --global Microsoft.dotnet-try
7. Try .NET
✓ 基於 .NET 的嵌入式的程式碼執行器
✓ 提供網頁介面來執行 .NET 程式碼
• 使用 Blazor 和 Web Assembly 技術
✓ 可安裝成 dotnet CLI 全域工具,提供
離線執行環境
✓ Microsoft Docs 線上學習支援大量使
用此技術,讓 .NET 學習者能閱讀文件
的同時,直接在網頁上執行程式碼
https://dotnet.microsoft.com/learn/dotnet/in-browser-tutorial/
dotnet tool install --global Microsoft.dotnet-try
8. 為什麼有 Notebook
✓1984 年 Donald Knuth 提出文學式
程式設計,希望能用來取代結構化程
式設計
www.literateprogramming.com/knuthweb.pdf
9. 為什麼有 Notebook
✓1984 年 Donald Knuth 提出文學式
程式設計,希望能用來取代結構化程
式設計
✓1988 年 Wolfram 公司推出筆記本介
面的 Mathematica 工具
10. 為什麼有 Notebook
✓1984 年 Donald Knuth 提出文學式
程式設計,希望能用來取代結構化程
式設計
✓1988 年 Wolfram 公司推出筆記本介
面的 Mathematica 工具
✓2015 年眾多資料科學解決方案採用
Notebook 的方式來呈現
19. .NET Notebook for C#
✓使用修改版的 C# Script 語法
• 也就是使用 .csx 腳本的格式,跟平常寫的 C# 不一樣但也差不多
• scriptcs.net
✓預設載入以下套件參考
• .NETStandard.Library
• Microsoft.AspNetCore.Html.Abstractions
• Microsoft.DotNet.Interactive
• Microsoft.DotNet.Interactive.Formatting
// 設定 NuGet.org 的套件來源
#i "nuget:https://api.nuget.org/v3/index.json"
// 使用本機的 NuGet 套件來源
#i "nuget:C:mypackagesrcbinRelease"
// 還原最新 pre-release 版本的 NuGet 套件
#r "nuget:Microsoft.DotNet.Interactive.ExtensionLab,*-*"
20. .NET Notebook for C#
✓預設使用以下 namespace
• System
• System.Collections
• System.Collections.Generic
• System.Ling
• System.Threading.Tasks
• System.Text
• Microsoft.DotNet.Interactive
• Microsoft.DotNet.Interactive.Formatting
IntelliSense 岀不來?建議使用 using 語句明確指定要
使用的 namespace,讓 IntelliSense 比較不會出狀況
22. 通用型 Magic Commands
宣告類
用於宣告該 區塊是使用哪個 Subkernel
• #!sql
• #!csharp 或用 #!c#, #!C#
• #!fsharp 或用 #!f#, #!F#
• #!pwsh 或用 #!powershell
• #!javascript 或用 #!js
• #!html
• #!markdown
功能類
提供適用於檢視或紀錄的功能
• #!lsmagic 列出當前可用的指令
• #!log 開啟並檢視詳細執行日誌
• #!about 顯示當前 .NET Interactive 版本
• #!time 測量並顯示該區塊執行時間
• #!value 儲存值,需搭配 #!share 使用
23. 特定語言專用 Magic Commands
提供給 C# 和 F# 語言專用
#i 設定 NuGet 套件來源
#r 將套件加入參考
#!share 從 #!value 取得共享的變數
#!who 顯示頂層變數的名稱
#!whos 顯示頂層變數的名稱、類型和值
https://github.com/dotnet/interactive/blob/main/docs/magic-commands.md
25. 自訂 Magic Command
• 實作 IKernelExtension 介面,並封裝成 NuGet 套件
• 使用 System.CommandLine 來處理命令參數及邏輯
• 專案檔要將產出的 dll 封裝到指定位置
public interface IKernelExtension
{
Task OnLoadAsync(Kernel kernel);
}
<ItemGroup>
<None Include="$(OutputPath)/Extension.dll" Pack="true" PackagePath="interactive-extensions/dotnet" />
</ItemGroup>
https://github.com/dotnet/interactive/blob/main/docs/extending-dotnet-interactive.md
26. 自訂 Magic Command (script-based)
• 用 .NET Notebook 本身作為 Magic Command,並封裝成
NuGet 套件
• 必須使用 .dib 檔案格式來撰寫處理命令參數及邏輯
• 專案檔要將 .dib 檔封裝到指定位置
<ItemGroup>
<None Include="extension.dib" Pack="true" PackagePath="interactive-extensions/dotnet" />
</ItemGroup>
https://github.com/dotnet/interactive/blob/main/samples/extensions/RandomNumber/README.md
30. 如果你想要打造屬於
自己的 Notebook
VS Code Notebook API
Sample Notebook
VS Code Notebooks: A Deep Dive
https://code.visualstudio.com/api/extension-guides/notebook
https://github.com/microsoft/vscode-nodebook
https://www.youtube.com/watch?v=D-AXZZDTQhM