IronRuby迁移至Ruby:加载.NET程序集问题求助
解决Ruby加载.NET程序集替代IronRuby
load_assembly 的问题 替代load_assembly的主流方案
IronRuby的load_assembly是专为.NET集成设计的专属方法,标准Ruby没有内置对应实现,你可以通过clr gem(Ruby与.NET交互的主流工具库)实现相同功能:
- 先安装gem:
gem install clr - 加载程序集的代码示例:
require 'clr' # 若程序集在GAC或当前执行路径下,直接加载名称 CLR.load_assembly 'MyAppName.UIAutomationClientSideProviders' # 若程序集在指定路径,可传入完整文件路径 CLR.load_assembly File.expand_path('./MyAppName.UIAutomationClientSideProviders.dll') # 访问类的逻辑和原IronRuby代码基本一致 assembly = MyAppName::UIAutomationClientSideProviders::UIAutomationClientSideProviders.to_clr_type.assembly
WIN32OLE调用的可行性分析
WIN32OLE核心用于调用COM组件,如果你这个C#类未被注册为COM对象,直接用WIN32OLE无法调用。若要走此路线,需要额外操作:
- 在C#项目的
AssemblyInfo.cs中添加[assembly: ComVisible(true)]标记 - 使用
regasm.exe注册程序集:regasm.exe MyAppName.UIAutomationClientSideProviders.dll /codebase - 完成注册后才能通过WIN32OLE调用,但这种方式步骤繁琐,且效率和便捷性远不如
clrgem,不推荐作为首选方案。
额外注意事项
- 确保程序集的依赖库也在Ruby可访问的路径(同目录或GAC)中
- 运行Ruby的环境需与.NET程序集的框架版本匹配(比如程序集基于.NET Framework 4.8,需确保Ruby的
clrgem适配该版本)
内容的提问来源于stack exchange,提问作者ELSacchetto
相关产品推荐
相关产品推荐

