日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

使用C#为.NET Interactive开发自定义扩展

發布時間:2023/12/4 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用C#为.NET Interactive开发自定义扩展 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在前面的文章中,我們介紹了如何在.NET Interactive notebook繪制圖表和執行SQL。

那么,能不能為.NET Interactive開發交互功能呢?

今天,我們就來演示如何實現。

創建項目

新建類庫項目Demo1Extension,需要引用Nuget包Microsoft.DotNet.Interactive和Microsoft.DotNet.Interactive.CSharp。注意:需要選擇“包含預發新版”

修改項目文件,增加項目配置:

<ItemGroup><None?Include="$(OutputPath)/Demo1Extension.dll"?Pack="true"?PackagePath="interactive-extensions/dotnet"?/> </ItemGroup>

指定PackagePath不能改,否則無法加載擴展

新增自定義擴展類

創建Demo1KernelExtension類,實現IKernelExtension。

這里有個坑:?類名必須以KernelExtension結尾,否則無法加載擴展。這個默認規則太隱晦了,害我試了半天。

自定義格式化

可以為指定Type實現自定義格式化輸出。

這里我們以string為例:

public?class?Demo1KernelExtension?:?IKernelExtension {public?Task?OnLoadAsync(Microsoft.DotNet.Interactive.Kernel?kernel){//指定輸出格式Formatter.SetPreferredMimeTypeFor(typeof(string),?HtmlFormatter.MimeType);Formatter.Register<string>((str,?writer)?=>{writer.Write(DrawHtml(str));},?HtmlFormatter.MimeType);return?Task.CompletedTask;}public?static?IHtmlContent?DrawHtml(string?str){var?id?=?"div"?+?Guid.NewGuid().ToString("N");var?div?=?PocketViewTags.div[id:?id](PocketViewTags.h1[style:?"color:#F00"](str.ToString()));return?div;} }

我們將輸入的字符串格式化成了Html輸出,格式為“<div?id='xxx'><h1?style='color:#F00'>輸入字符串</h1></div>”。

測試

首先,執行下面命令,生成Nuget包:

dotnet?builddotnet?pack?/p:PackageVersion=1.0.0

然后,在VS Code中創建.NET Interactive notebook,并引用上面生成的Nuget包:

#i?D:\codes\Demo1Extension\Demo1Extension\bin\Debug #r?"nuget:Demo1Extension,1.0.0"

由于我們剛才生成的Nuget包還在本地,所以需要用#i命令設置加載位置。

出現下面提示,就表明擴展加載成功,否則請檢查上面說過的注意事項:

輸入一個字符串,執行,返回正常:

自定義命令

還可以實現自定義命令。

這里,我們增加了一個#!demo1命令,它接受一個字符串參數,并輸出Html:

public?Task?OnLoadAsync(Microsoft.DotNet.Interactive.Kernel?kernel) {var?command?=?new?Command("#!demo1",?"it's?a?demo?extension");command.AddArgument(new?Argument());command.Handler?=?CommandHandler.Create((string?str,?KernelInvocationContext?invocationContext)?=>{invocationContext.Display(DrawHtml("demo1:?"+str));});kernel.AddDirective(command);return?Task.CompletedTask; }

再次生成Nuget包并引用,記得修改一下版本號。

執行命令,返回正常:

結論

在本文中,我們演示了如何創建.NET Interactive notebook自定義擴展。

關于自定義擴展的詳細API,可以參看官方文檔:https://github.com/dotnet/interactive/blob/main/docs/extending-dotnet-interactive.md。

如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!

總結

以上是生活随笔為你收集整理的使用C#为.NET Interactive开发自定义扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精九九网站漫画 | 国产成人精品视频在线观看 | 日韩精品亚洲一区 | 久久成人在线视频 | 第色| 成人a级大片 | 国产欧美日韩精品在线 | 精品一区电影 | 国语对白一区二区三区 | 亚洲av毛片一区二二区三三区 | 国产精品剧情av | 色香影院 | 亚洲成熟少妇视频在线观看 | 黑人粗进入欧美aaaaa | av一本在线| 亚洲一卡二卡在线 | 亚洲成人一二三 | 国产一级黄色片子 | 国产三级午夜理伦三级 | 伊人激情在线 | 国产毛片在线视频 | 天天操天天插天天射 | 一级片免费观看视频 | www.久久精品视频 | 亚洲一级二级片 | 69视频国产 | 高潮一区二区 | 久久久不卡国产精品一区二区 | 有码视频在线观看 | 久久神马 | 婷婷精品视频 | 玉米地疯狂的吸允她的奶视频 | 日韩大片免费观看视频播放 | 波多野结衣中文字幕一区二区三区 | 亚洲一区二区三区四区不卡 | 悠悠色影院 | 狠狠躁18三区二区一区视频 | 免费看一级黄色大全 | 欧美性大战久久久久xxx | 国产少妇自拍 | av一区二区不卡 | 国产精品a级 | 欧美色综合色 | 精品少妇一区二区三区在线观看 | 亚洲一区二区三区免费观看 | 欧美日韩在线观看视频 | 欧美日韩网址 | 一级黄色片免费在线观看 | 91极品身材尤物theporn | 狠狠撸视频| 91视频免费观看网站 | 香港台湾日本三级大全 | 午夜寂寞自拍 | 免费看国产一级片 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 粉嫩av一区二区三区天美传媒 | 国产欧美精品久久久 | 大尺度网站在线观看 | 亚洲一本之道 | 国产亚洲久久 | 精品少妇白浆小泬60P | 四虎在线免费观看 | 久av在线 | 日韩av手机在线免费观看 | 亚洲婷婷免费 | 黄色一级片免费观看 | 日日干夜夜艹 | 丰满人妻翻云覆雨呻吟视频 | 精品无码一区二区三区电影桃花 | 国产三级午夜理伦三级 | 日本黄色录像 | 久久影视大全 | 免费成人深夜夜 | 噼里啪啦国语版在线观看 | 好吊色av| 狠狠人妻久久久久久综合蜜桃 | 国产在线一区二区 | 色偷偷av男人的天堂 | 亚洲高清精品视频 | 亚洲第1页 | 青青视频免费 | 日本精品视频网站 | 婷婷色综合网 | 国产一区二区三区四区在线观看 | 国产a大片 | 成人一区二区三区在线观看 | 免费搞黄网站 | www.国产 | 中文字幕2021 | 欧美日韩高清在线观看 | 天天射夜夜爽 | 田中瞳av| 一本高清视频 | 九色九一| 久久婷婷五月国产色综合激情 | 欧美一级一级一级 | 97在线免费观看视频 | 污污的网站在线观看 | 日韩一级片网站 |