# CSharpScriptDemo **Repository Path**: sky0535/CSharpScriptDemo ## Basic Information - **Project Name**: CSharpScriptDemo - **Description**: 使用 CS-Script 库实现 C# 脚本与宿主程序(Host Application)之间的交互 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-22 - **Last Updated**: 2025-12-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CSharpScriptDemo 这是一个基于 .NET 8.0 的 Windows Forms 应用程序,演示了如何使用 [CS-Script](https://github.com/oleg-shilo/cs-script) 库在 C# 应用程序中动态执行 C# 脚本,并实现脚本与宿主程序(Host Application)之间的交互。 ## 项目简介 本项目主要展示了以下功能: 1. **动态执行 C# 脚本**:在运行时编译并执行字符串形式的 C# 代码。 2. **脚本调用宿主方法**:演示脚本代码如何调用宿主程序中定义的静态方法和实例方法。 3. **数据交互**:演示脚本与宿主程序之间的数据传递。 ## 功能特性 * **Execute Script (执行脚本)**: * 加载并显示一段简单的 C# 脚本。 * 脚本中定义了一个 `SayHello` 方法,执行时会弹出一个消息框并返回格式化后的字符串。 * **Call Host (调用宿主)**: * 加载一段能够调用宿主程序方法的脚本。 * 支持从列表中选择不同的宿主方法(HostMethodA ~ HostMethodE)。 * 支持调用宿主程序的静态方法(Static Methods)。 * 支持调用宿主程序的实例方法(Instance Methods),并访问宿主对象的状态。 ## 环境要求 * .NET 8.0 SDK 或更高版本 * Visual Studio 2022 (推荐) 或其他支持 .NET 的 IDE ## 依赖库 * [CS-Script](https://www.nuget.org/packages/CS-Script/) (v4.13.0) ## 快速开始 1. 克隆或下载本项目到本地。 2. 使用 Visual Studio 打开 `CSharpScriptDemo.sln` 解决方案文件。 3. 还原 NuGet 包。 4. 构建并运行项目。 ## 使用说明 ### 1. 基础脚本调用 1. 点击界面上的 **"Call Script"** 按钮(或者先点击 "Load Script" 重置脚本内容)。 2. 程序将编译文本框中的代码,并执行其中的 `SayHello` 方法。 3. 你将看到一个弹窗,并且底部的结果框会显示脚本返回的文本。 ### 2. 脚本调用宿主方法 1. 在左侧的列表中选择一个方法名(例如 `HostMethodA`, `HostMethodC` 等)。 2. 点击 **"Call Host"** 按钮。 3. 文本框将加载用于调用宿主方法的脚本代码。 4. 脚本将根据你的选择,回调 `MainForm` 中对应的方法: * **HostMethodA/B**: 调用静态方法。 * **HostMethodC/D/E**: 调用实例方法,可能会操作界面元素或访问实例数据。 ## 代码结构 * `MainForm.cs`: 主窗体逻辑,包含了供脚本调用的宿主方法 (`HostMethodA` - `HostMethodE`) 以及按钮事件处理。 * `Models/UserInfo.cs`: 一个简单的数据模型类,用于演示数据对象的使用。 * `Program.cs`: 应用程序入口点。 ## 关键代码示例 **宿主程序中执行脚本:** ```csharp // 加载并编译脚本 dynamic obj = CSScript.Evaluator.LoadCode(scriptContent); // 调用脚本中的方法 string result = obj.SayHello("Message"); ``` **脚本中调用宿主方法:** ```csharp // 脚本类 public class Script { // 调用宿主静态方法 public string HostCall(string methodName) { if (methodName == "HostMethodA") return MainForm.HostMethodA(); return ""; } } ```