日韩性视频-久久久蜜桃-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开发自定义扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

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