Rhino 8正式版已经推出,不单运行效率高了,而且推出了各种好用的新功能,立马申请了90天试用版。作为一个Grasshopper二开的人,非常关心原来开发的小插件还能不能继续支持。这不,发现调用SAP20000出现了报错,wow,解决痛点的机会来了。

1 问题描述

出现了下面的报错,1. Solution exception:Method not found: 'System.Object System.Activator.GetObject(System.Type, System.String)'. 或者是“Solution exception:Method not found: 'System.Object System.Runtime.InteropServices.Marshal,GetActiveObject(System.String)

2 原因分析

百度一下,搜到CSDN上的相似问题解答,看来这个问题是NET框架版本的问题。但怎么解决呢。

我现在一般搜不到的,都会问下chatgpt,哪怕找chatgpt问下,也只是告诉了一些可能的原因:

3 Chatgpt的回答:

这个错误信息 "Method not found: 'System.Object System.Runtime.InteropServices.Marshal.GetActiveObject(System.String)'" 通常会在尝试在.NET应用程序中使用 Marshal.GetActiveObject 方法时出现,但是找不到或无法访问该方法。这可能由于各种原因造成:

  1. 框架版本:确保您正在使用的.NET框架版本支持 Marshal.GetActiveObject 方法。一些较旧或专门的版本可能不包括此方法。

  2. 库加载:可能未正确加载或引用您的项目中所需的库。请检查是否已导入了正确的命名空间:

    csharpCopy code
    using System.Runtime.InteropServices;
  3. 系统配置:有时,可能由于系统配置问题,该方法可能会受到限制或不可用。

  4. 平台兼容性:验证该方法是否适用于您正在目标的平台(例如,32位与64位架构)。

  5. 部署问题:如果在部署的环境中出现此问题,请确保必要的程序集和依赖项已正确部署到应用程序旁边。

这是如何使用 Marshal.GetActiveObject 的示例:

csharpCopy codeusing System;
using System.Runtime.InteropServices;

class Program
{
    static void Main()
    {
        string progId = "Excel.Application"// 例如:Excel 应用程序
        object excelApp = null;

        try
        {
            excelApp = Marshal.GetActiveObject(progId);
            Console.WriteLine("找到Excel应用程序!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("错误:" + ex.Message);
        }

        // 如果找到了活动对象,可以进行进一步的操作
        // ...
    }
}

确保引用了适当的库,并具有使用 Marshal.GetActiveObject 获取对象所需的权限。

如果仍然遇到问题,请仔细检查兼容性、环境和框架版本,确保一切都正确对齐。另外,查阅相关的文档或资源,了解特定方法或您正在工作的环境可能提供额外的见解

4 官方的解答

Rhino 8默认采用.NET Core库,已经可以兼容大部分的.Net FrameWork框架的插件,但如果出现不兼容的时候,则可以通过Rhino的命令行

”SetDotNetRuntime"来重置,然后重启Rhino后即可解决这个问题。如果要返回默认的,则也是这个命令,选择.Net Core即可

STEP1 : 输入命令行 SetDotNetRuntime,弹出如下对话框。

STEP2: 点击Runtime,弹出如下对话框。

STEP3:选择,NETFramework即可。弹出如下对话框

重启之后,即可解决一些插件类似问题。

参考文献:

(1)https://developer.rhino3d.com/guides/rhinocommon/moving-to-dotnet-7/

(2)www.openai.com

(3)未找到System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid) 方法错误-CSDN博客

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

You cannot copy content of this page