Polyglot Notebooks快速入门

Polyglot Notebooks快速入门

想必大家都了解过Jupyter Notebook,这种文件最大的特点是,可以让代码、运行结果、文字说明,甚至结果图表都在同一个文档中,并且每个单元格可以只运行一个片段,就可以立即输出。这种格式,对学习、调试、演示、是非常友好的。作为一个.neter,今天隆重讲解一下.net领域的Notebook.Polyglot Notebooks,先来看下效果

写C#,用Display直接显示效果,清晰明了

image-20251110181049430

写html,直接在下面渲染出效果

image-20251110181219869

当然,也可以直接写Markdown

image-20251110181400689

安装 VS Code插件

  1. 安装 C# 相关插件
C# Plugins
  1. 安装 Polyglot Notebooks 插件
polyglot

创建笔记:

  1. 使用 Ctrl/Cmd+Shift+P 快捷键,并选中 Polyglot Notebook: Create new blank notebook ,再依次选择文件后缀格式(.dib 或.ipynb),再选择编程语言(C#/F#/等)创建 Ployglot Notebook。
  2. 直接新建文件,文件后缀设置为 .dib 或 ipynb 即可。再点击Selector Kernel 选择.NET Interactive

.ipynb VS .dib

  • .ipynb文件是Jupyter Notebooks引入的交互式Python笔记本文件格式,会存储执行结果,文件大小较大。

  • .dib文件是Polyglot Notebooks引入的新文件格式,文件相应较小,用于存储代码和文档,但不存储执行结果,易于版本管理。

安装Nuget 包

  1. 引用 Nuget 包:使用 #r "nuget:<package name>[,<package version>]"命令。#r中的r表示reference举例:

    #r "nuget: Microsoft.EFcore"引入最新已正式发布的包

    #r "nuget: Microsoft.EFcore, *-*"引入最新预发布版本的包

    #r "nuget: Microsoft.EFcore, 1.11.1"引入指定版本的包

    #r "SomeAssembly.dll"引入DLL文件

  2. 指定 Nuget 源:使用 #i "nuget: {NugetSource}" 命令。#i表示include source举例:

    • #i "nuget:https://nuget.cdn.azure.cn/v3/index.json
1
2
3
4
// 引入本地dll
#r "F:\code\ClassLibrary1\ClassLibrary1\bin\Debug\net8.0\ClassLibrary1.dll"

ClassTest.GetMessage();

引入外部类文件

注意:在.NET Interactive 环境中不能定义命名空间!!!

1
2
3
4
5
6
7
8
9
10
using System.ComponentModel;
public class EnumHelper
{
public static string GetDescription(Enum value)
{
var field = value.GetType().GetField(value.ToString());
var attributes = (DescriptionAttribute[])field.GetCustomAttributes(typeof(DescriptionAttribute), false);
return attributes.Length > 0 ? attributes[0].Description : value.ToString();
}
}
1
2
3
4
5
6
7
8
9
// 导入外部文件
#!import Config/EnumHelper.cs
enum DayOfWeek
{
[Description("星期一")]
Monday = 1
}
var desc = EnumHelper.GetDescription(DayOfWeek.Monday);
desc.Display();

禁用Warning

有一些正在试用阶段的库需要禁用Warning

1
2
3
4
5
using Microsoft.SemanticKernel.Plugins.Core;

#pragma warning disable SKEXP0050
typeof(MathPlugin).Display();
#pragma warning restore SKEXP0050

交互式输入

1
2
3
4
5
6
7
8
9
//交互式输入
using PolyglotKernel = Microsoft.DotNet.Interactive.Kernel;

var input = await PolyglotKernel.GetInputAsync("Pick a number.");
input.Display();

var input2 = await PolyglotKernel.GetPasswordAsync("Pick a pwd.");

input2.Display();

当然,更简单的方法可以这样用#!set --name url --value @input:"请输入"

变量共享

Polyglot Note的一大优势就是可以使用多种语言,很多时候,我们需要将一个A语言的上下文传递到B语言种,如C#传到JS,这个时候就可以使用变量共享。

  1. 使用#!set命令,--value代表要用哪些值,--name表示给值起的名称,比如最简单的方式#!set --name age --value 10,设置变量age为10

image-20251110181954616

当然也可以直接在Polyglot的变量视图直接点击分享,会自动多出一个cell

image-20251110182337089

image-20251110182435101

呈现Mermaid图

Mermaid在展示流程图的时候经常用

image-20251110182951861

用value来声明内容

可以直接用value来声明内容,方便后面直接调用

1
2
3
4
#!value --name param  --mime-type application/json 
[
{"key":"value"}
]

然后用的时候在前面加上

#!share param --from value --as data

image-20251110184351585

#!value --from-file data.json --name data也可以直接从外部文件中读取

跟踪cell的执行时间

直接使用#!time

image-20251110184639345

HTTP请求

有时候需要测试接口啥的,可以直接使用

image-20251110184904408

导出Markdown

很多时候,我们是需要导出markdown格式的,使用命令

jupyter nbconvert --to markdown 你的文件.ipynb

作者

步步为营

发布于

2025-11-09

更新于

2025-11-11

许可协议