You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试工具功能需求:支持用户选择待测试解决方案版本并调用其方法

实现动态选择待测试版本的解决方案

嘿,这个需求其实很清晰——咱们要把原来硬绑定的本地待测试程序集,改成用户可选择的动态加载模式。下面是一步步的具体实现方案:

1. 用OpenFileDialog让用户选择目标程序集

先加个触发控件(比如按钮),弹出文件选择框让用户挑最新版本的.dll或.exe:

using System.Windows.Forms;

private void SelectTestAssemblyBtn_Click(object sender, EventArgs e)
{
    using var openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "程序集文件 (*.dll;*.exe)|*.dll;*.exe|所有文件 (*.*)|*.*";
    openFileDialog.Title = "选择待测试的解决方案版本";
    
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        // 获取选中文件路径,进入加载调用环节
        LoadTestAssemblyAndInvoke(openFileDialog.FileName);
    }
}

如果是WPF项目,就用Microsoft.Win32.OpenFileDialog,用法差不多~

2. 动态加载程序集并调用同名方法

这一步是核心:通过反射加载选中的程序集,定位到咱们要测试的类型和方法(因为你说方法名不变,直接硬编码就行):

using System.Reflection;

private void LoadTestAssemblyAndInvoke(string assemblyPath)
{
    try
    {
        // 加载目标程序集
        var targetAssembly = Assembly.LoadFrom(assemblyPath);
        
        // 替换成你待测试类的完整命名空间+类名,比如"TestApp.Core.BusinessService"
        var testClassType = targetAssembly.GetType("YourTestNamespace.YourTestClass");
        if (testClassType == null)
        {
            MessageBox.Show("没找到目标测试类,检查下程序集版本是否匹配!");
            return;
        }
        
        // 如果是静态方法,跳过实例化这一步
        var testClassInstance = Activator.CreateInstance(testClassType);
        
        // 替换成你要调用的方法名,有参的话要传参数类型数组,比如new[] { typeof(string), typeof(int) }
        var testMethod = testClassType.GetMethod("YourTestMethodName");
        if (testMethod == null)
        {
            MessageBox.Show("目标测试方法不存在,请确认方法名是否一致!");
            return;
        }
        
        // 调用方法,有参就把null换成参数数组,比如new object[] { "test", 123 }
        var methodResult = testMethod.Invoke(testClassInstance, null);
        
        // 处理返回结果(按需调整)
        MessageBox.Show($"测试方法调用成功!结果:{methodResult?.ToString() ?? "无返回值"}");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"加载或调用出错:{ex.Message}");
    }
}

3. 几个要注意的点

  • 保持类型/方法的一致性:既然你说方法名不变,最好确保类的全名、方法的参数列表也别改,不然反射会找不到目标。如果参数有变动,得加兼容逻辑。
  • 依赖文件要齐全:如果待测试程序集依赖其他DLL,这些文件得和选中的程序集在同一个文件夹里,不然加载会失败。
  • 版本兼容:测试工具的.NET版本要和待测试程序集的版本匹配,比如工具用.NET 6,就别加载.NET Framework 4.8的程序集。
  • 权限问题:如果程序集在受保护目录(比如Program Files),可能需要管理员权限才能加载。

这样改完,用户就能随时选择最新版本的待测试解决方案,完全不用动你原来的静态引用啦!

内容的提问来源于stack exchange,提问作者Mootchmonster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:47:27