SharpCodePad 2.0.0.1
See the version list below for details.
dotnet add package SharpCodePad --version 2.0.0.1
NuGet\Install-Package SharpCodePad -Version 2.0.0.1
<PackageReference Include="SharpCodePad" Version="2.0.0.1" />
<PackageVersion Include="SharpCodePad" Version="2.0.0.1" />
<PackageReference Include="SharpCodePad" />
paket add SharpCodePad --version 2.0.0.1
#r "nuget: SharpCodePad, 2.0.0.1"
#:package SharpCodePad@2.0.0.1
#addin nuget:?package=SharpCodePad&version=2.0.0.1
#tool nuget:?package=SharpCodePad&version=2.0.0.1
SharpCodePad 控件使用指南
简介
SharpCodePad 是一个基于 AvalonEdit 的高级代码编辑器控件,集成了代码编辑、语法高亮、编译运行、调试和项目管理等功能。该控件支持多种编程语言(C#、JavaScript、HTML、CSS、XML、MarkDown等),适用于需要内嵌代码编辑功能的 WPF 应用程序。
主要功能
1. 代码编辑功能
- 语法高亮:支持多种编程语言的语法高亮显示(C#、JavaScript、HTML、CSS、XML、MarkDown等)
- 代码折叠:可折叠/展开代码块,支持全部展开、全部折叠和重置折叠状态
- 代码格式化:自动格式化 C# 代码,基于 Roslyn 编译器
- 智能提示:基于 ICSharpCode.NRefactory 的代码智能补全功能
- 签名帮助:提供方法重载和参数信息的实时提示
- 悬停信息:鼠标悬停显示变量、方法、类型等的详细信息
2. 项目管理
- 保存项目:保存当前代码和项目配置
- 另存为项目:将项目保存为新文件
- 导出代码:将代码导出为相应语言的文件
- 导出 DLL:将代码编译并导出为 DLL 文件
- 项目描述:支持添加和保存项目描述信息
3. 编译与运行
- 编译代码:使用 Roslyn 编译器(Microsoft.CodeAnalysis.CSharp 4.14.0)编译 C# 代码
- 运行代码:执行编译后的代码并显示输出结果
- 错误提示:实时显示编译错误和警告信息,支持错误弹窗提示
- 进度显示:编译过程中显示进度条和状态信息
4. 调试功能
- 输出窗口:显示代码执行过程中的输出信息
- 变量查看:查看运行时变量的值
- VariableDisplayPlugin:高级变量显示插件,支持自定义变量展示方式
- 自动检测并展示运行时变量
- 支持自定义变量的展示格式和布局
- 可根据变量类型智能选择合适的展示方式
- 支持多种显示类型:Normal(普通文本)、Entity(对象属性)、Image(图像)等
5. 引用管理
- 导入 DLL:导入外部 DLL 并添加相应的命名空间
- 引用管理:管理项目引用的程序集
- 命名空间选择器:可视化选择要导入的命名空间,避免不必要的命名空间导入
- SDK 版本设置:支持设置目标 SDK 版本,默认为 Latest
控件结构
主要组件
- CodeEditor.xaml:控件的 UI 定义,包含菜单栏、代码编辑区和底部面板
- CodeEditor.xaml.cs:控件的代码后置文件,处理 UI 事件、初始化和高级功能(签名帮助、悬停信息)
- CodeEditorViewModel.cs:实现控件的业务逻辑和命令
- Extensions/AvalonExtensions:AvalonEdit 编辑器的扩展功能
- Core:核心功能实现,包括语言定义(EPLanguage)和项目模型(ProjectModel)
- ViewModel:包含 DebugVariableViewModel、OutputsViewModel 等视图模型
- Messenger:基于 WeakReferenceMessenger 的消息通信系统
- View:包含自定义视图控件,如 SignatureHelpControl、HoverInfoControl 等
界面布局
- 顶部菜单栏:提供保存、导出等基本操作
- 中间编辑区:基于 AvalonEdit 的代码编辑区
- 底部面板:包含三个部分
- Build:显示编译信息和错误提示
- Output:显示程序输出
- Vars:显示变量信息
- 弹窗组件:包括签名帮助弹窗、悬停信息弹窗和错误提示弹窗
使用方法
在 WPF 应用中集成
添加引用:在项目中引用 SharpCodePad.dll 以及相关依赖
在 XAML 中添加命名空间:
xmlns:textEditor="clr-namespace:SharpCodePad"添加 SharpCodePad 控件:
<textEditor:CodeEditor Width="1200" Height="750" />配置扩展功能(可选):
<textEditor:CodeEditor Width="1200" Height="750"> <Setter Property="SignatureHelpProvider" Value="{StaticResource MySignatureHelpProvider}" /> <Setter Property="HoverInfoProvider" Value="{StaticResource MyHoverInfoProvider}" /> </textEditor:CodeEditor>
基本操作
创建和保存项目
- 通过顶部菜单栏的 Save 选项保存项目
- 项目文件扩展名为 .csp,包含代码、项目配置和描述信息
编辑代码
- 在中间编辑区编写 C# 代码
- 使用快捷键或右键菜单格式化代码
编译和运行
- 通过右键菜单或命令编译和运行代码
- 编译错误会显示在底部 Build 面板
- 程序输出显示在 Output 面板
导入 DLL
- 通过右键菜单的 Import DLL 选项导入外部 DLL
- 选择要导入的命名空间
- 导入的 DLL 将自动添加到项目引用
- 支持拖放操作导入 DLL 文件
折叠代码
- 使用编辑器左侧的折叠标记折叠/展开代码块
- 或通过右键菜单的 ExpandAll、CollapseAll、ResetFolding 选项
命令列表
| 命令 | 功能 |
|---|---|
| FormatCode | 格式化当前代码 |
| Expand | 展开所有代码折叠 |
| Collapse | 折叠所有代码折叠 |
| ResetFolding | 重置代码折叠状态 |
| CompileCode | 编译当前代码,显示进度 |
| RunCode | 编译并运行代码 |
| SaveProject | 保存当前项目 |
| SaveAsProject | 另存为新项目 |
| ImportDLL | 导入外部 DLL |
| ExportDLL | 导出代码为 DLL |
| ExportCode | 导出代码为文件 |
| Align | 设置变量对齐方式 |
| Ctrl+K | 触发签名帮助(默认快捷键) |
项目模型
SharpCodePad 使用 ProjectModel 类管理项目信息,包括:
- 项目路径 (Path) 和代码文件路径 (CodeFilePath)
- 项目描述 (Description)
- 引用的程序集列表 (References)
- 顶部命名空间 (TopUsings)
- 语言设置 (Language),支持多种编程语言
- SDK 版本 (SDKVersion)
- 是否为顶级语句编码模式 (IsTopStatementCoding)
消息通信
控件使用 WeakReferenceMessenger 进行内部组件通信,主要消息类型:
- GetCurrentCodePageIndex:获取当前代码页索引
- UpdateFolding:更新代码折叠状态,支持多种编程语言
- CoverCode:覆盖代码内容
注意事项
- 控件需要 .NET Framework 4.8 运行环境
- 编译功能依赖 Roslyn 编译器(Microsoft.CodeAnalysis.CSharp 4.14.0)
- 导入的 DLL 必须与项目目标框架兼容
- 运行代码需要正确设置入口点(Main 方法或顶级语句)
- 某些高级功能(如签名帮助、悬停信息)可以通过实现相应接口进行自定义扩展
依赖项
| 依赖项 | 版本 | 用途 |
|---|---|---|
| AvalonEdit | 6.3.1.120 | 代码编辑器核心 |
| CommunityToolkit.Mvvm | 8.4.0 | MVVM 工具包 |
| Microsoft.CodeAnalysis.CSharp | 4.14.0 | Roslyn 编译引擎 |
| ICSharpCode.NRefactory | 5.5.1 | 代码分析和补全 |
| Newtonsoft.Json | 13.0.3 | JSON 序列化/反序列化 |
| SharpBoxesCore | 1.1.3.3 | 通用工具库 |
| SharpBoxesCore.Wpf | 1.2.2 | WPF 扩展工具 |
| SharpCodePad.CodeCompletion | - | 代码补全功能 |
| SharpCodePad.Compile | - | 编译功能 |
| SharpCodePad.VariableDisplayPluginCore | - | 变量显示插件系统 |
功能亮点
1. 插件化架构
SharpCodePad 采用高度模块化的插件化架构,特别是 VariableDisplayPlugin 插件系统,允许开发者自定义变量的展示逻辑和UI呈现方式。支持动态加载外部插件 DLL。
2. 智能代码分析
- 基于 Roslyn 的实时代码分析和诊断
- 基于 ICSharpCode.NRefactory 的代码补全和上下文建议
- 智能检测变量并自动在调试窗口中展示
- 提供签名帮助和悬停信息等高级功能
3. 灵活的UI布局
- 可调整的面板分割和布局
- 支持多种变量对齐方式(水平、垂直、网格布局)
- 可自定义的编辑器选项和显示设置
- 集成多种智能弹窗,提供上下文感知的用户界面
4. 文件拖放支持
通过拖放功能实现对代码文件和DLL文件的快速导入,提高开发效率。
5. 响应式设计
使用 CommunityToolkit.Mvvm 8.4.0 实现的响应式数据绑定,确保UI与数据模型的实时同步。
扩展开发
CodeEditor 提供了丰富的扩展点,允许开发者根据需求进行定制和扩展:
1. 编辑器扩展
- 修改 AvalonExtensions 中的编辑器扩展,定制编辑体验
- 实现自定义的文本高亮和格式化规则
- 添加特定语言的语法支持,扩展 EPLanguage 枚举和 PLanguage 类
2. 插件开发
- 扩展 VariableDisplayPluginCore 接口,实现自定义的变量展示逻辑
- 开发新的插件组件,继承 DisplayControlBase 类
- 实现插件间的通信和协作
- 通过 ExternalPluginsLoader 加载外部插件
3. 命令系统扩展
- 添加新的命令和功能到 ViewModel,使用 RelayCommand
- 自定义键盘快捷键和命令绑定
- 扩展现有的命令处理逻辑
4. 折叠策略定制
- 实现自定义的折叠策略,支持特定语言
- 通过 UpdateFolding 消息类型集成到折叠系统
- 支持特定语言或框架的代码结构分析
5. 消息系统扩展
- 利用现有的 WeakReferenceMessenger 消息通信系统,添加新的消息类型和处理逻辑
- 实现组件间的松耦合通信
- 扩展 Messenger 目录下的消息类,实现复杂的功能协调
6. 高级功能扩展
- 实现自定义的 ISignatureHelpProvider 接口,提供特定语言的签名帮助
- 实现自定义的 IHoverInfoProvider 接口,增强悬停信息功能
- 扩展编译和调试功能,支持更多编程语言
以上是 CodeEditor 控件的基本功能和使用指南,详细的 API 文档请参考源代码注释。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- AsyncLoggerLib (>= 1.0.12)
- AvalonEdit (>= 6.3.1.120)
- CommunityToolkit.Mvvm (>= 8.4.0)
- ICSharpCode.NRefactory (>= 5.5.1)
- Microsoft.Build.Utilities.Core (>= 17.14.28)
- Microsoft.CodeAnalysis.Analyzers (>= 3.11.0)
- Microsoft.CodeAnalysis.CSharp (>= 4.14.0)
- Microsoft.CodeAnalysis.CSharp.Workspaces (>= 4.14.0)
- Microsoft.CodeAnalysis.Workspaces.Common (>= 4.14.0)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.135)
- Newtonsoft.Json (>= 13.0.3)
- SharpBoxesCore (>= 1.1.3.8)
- SharpBoxesCore.Wpf (>= 1.2.3)
- SharpCodePad.CodeCompletion (>= 2.0.0.1)
- SharpCodePad.Compile (>= 2.0.0.1)
- SharpCodePad.VariableDisplayPluginCore (>= 2.0.0.1)
- System.Data.DataSetExtensions (>= 4.5.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.