上一篇文章我们安装了基础环境,还教大家如何单独注册Python、R环境,这次咱们就开始写代码,看看 Polyglot Notebooks 是怎么跨语言协同开发的。
一、安装Nuget包
1、引用 Nuget 包
- 使用 #r "nuget:<package name>[,<package version>]"命令
- #r "nuget: Microsoft.SemanticKernel" 引入最新正式发布的包
- #r "nuget: Microsoft.SemanticKernel, *-*" 引入最新预发布版本的包
- #r "nuget: Microsoft.SemanticKernel, 1.11.2" 引入指定版本的包
2、指定 Nuget 源
- 使用 #i "nuget: {NugetSource}"命令
- #i "nuget:https://nuget.cdn.azure.cn/v3/index.json"

二、定义类
在 Polyglot Notebooks 中定义类跟在 VS 中定义类很相似,而且在 Polyglot Notebooks 中还可以使用 Microsoft.DotNet.Interactive 提供的工具类。

三、引入外部类文件
如图所示创建 config 文件夹,并在其内部创建 EnumHelper 类,帮助类的内容我也一并在下边给出。注意:在 .NET Interactive 环境中不能定义命名空间!!!
cs
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、#!set命令进行变量共享
- 引用C#代码块中的 msg 变量并赋值到新的 message变量中:#!set --name message --value @csharp:msg
- 通过 @input 设置变量(要求用户输入变量值):#!set --name url --value @input:"Please enter a URL"
- 直接为变量设置值:#!set --name age --value 19
2、#!share命令进行变量共享
- 引用 value 中存储的同名变量:#!share someJson --from value
- 引用语言代码块中的变量写法1:#!share --from csharp msg --as message
- 引用语言代码块中的变量写法2:#!share msg --from csharp --as message(参数调换位置之后命令格式就跟 --from value 一样了,--as 是定义一个新变量来接收 msg 的值)
- 注意:不能把变量共享给html、mermaid


五、通过#!value存储变量

六、通过#!value读取文件中定义的Json

七、通过#!time指令统计代码执行时间

八、发送HTTP请求


九、编程控制Polyglot

十、使用mermaid画图
Mermaid 是一个功能强大的基于 JavaScript 的绘图工具,它可以通过简单的文本语法创建各种类型的图表,如:流程图、序列图、甘特图、状态图、类图等。

十一、禁用Warning
cs
using Microsoft.SemanticKernel.Plugins.Core;
#pragma warning disable SKEXP0050
typeof(MathPlugin).Display();
#pragma warning restore SKEXP0050
十二、交互式输入
cs
//交互式输入
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();
十三、总结
本文中所展示的例子涵盖了日常生活中常见的用法,如果上述例子不能满足各位需求的话,可以去.NET Interactive官网看一下,地址如下:github官网。相信用熟了 Polyglot Notebook 会提高我们的开发效率,如果大家有其他实用的用法可以在评论区补充。