上一篇中.Net 编译器平台 --- Roslyn,介绍了Roslyn的各项功能,包括公开API,使用语法,使用语义,使用工作区等功能。
那么回到上一篇中提到的问题,实现类似这样的功能(以下代码为伪代码):
就用到了上一篇提到的 「Scripting APIs」,还是先了解一下Roslyn提供的 Scripting APIs 有哪些。
官方文档(https://github.com/dotnet/roslyn/blob/main/docs/wiki/Scripting-API-Samples.md) 还是英文版,还是先将他翻译为中文,以下内容为译文。
脚本 API 可以让 .NET 应用程序实例化一个 C# 引擎,并针对由宿主提供的对象执行代码片段。以下是使用脚本 API 并进行一些常见示例的入门示例。您也可以查看脚本 API 的源代码。
请注意,作为一个语言模型,我无法提供实时的源代码示例或链接到具体的源代码。但是,您可以参考 Microsoft 的官方文档和示例来了解如何使用脚本 API 并查看相关源代码。
脚本 API 需要桌面版 .NET Framework 4.6+ 或 .NET Core 1.1(自 Roslyn v2.0.0-rc3、Visual Studio 2017 RC3 起支持)。
脚本 API 无法在通用 Windows 应用程序和 .NET Native 中使用,因为应用程序模型不支持在运行时加载生成的代码。
安装 Scripting API NuGet 包:
以下示例代码中需要添加引用 using Microsoft.CodeAnalysis.CSharp.Scripting;
应用场景:
在下面的代码中,WithImports("System.IO")
将 using System.IO
; 添加到脚本选项中,使得可以在脚本代码中直接引用 System.IO
命名空间的类型,而无需使用限定符。
同样地,WithImports("System.Math")
将 using static System.Math
; 添加到脚本选项中,使得可以在脚本代码中直接引用 System.Math
类型的成员,而无需使用限定符。
:::tip{title="提示"} 目前,Globals 类型必须在从文件加载的程序集中定义。如果程序集在内存中(包括在交互式窗口中执行示例时),脚本将无法访问该类型。请参阅此处的问题。 :::
该委托不会保持编译资源(语法树等)处于活动状态。
编译(Compilation)提供了对完整的 Roslyn API 集合的访问。
❝参考 https://github.com/dotnet/roslyn/blob/main/docs/wiki/Scripting-API-Samples.md ❞
本文分享自 Niuery Diary 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!