我有一个有趣的挑战,我想知道如果有人在这里可以给我一些方向。动态调用程序集时出现复杂的API问题
我在写一个运行在网络上的.Net窗体表单应用程序,并使用SQL Server来保存和提取数据。
我想提供一个迷你“插件”API,开发人员可以在其中构建自己的程序集并实现特定的接口(IDataManipulate)。这些程序集可以被我的应用程序用来调用接口函数并做一些事情。
我可以使用我的API创建程序集,将文件复制到本地硬盘驱动器中的文件夹,并将我的应用程序配置为使用Reflection从实现的接口(IDataManipulate.Execute)调用特定函数。
问题:由于应用程序将被安装在网络中的多个工作站
,是不可能复制插件DLLS用户将创建到每个机。
解决方案我想:
解决方案1
复制API DLL到网络共享。
问题:
需要AllowPartiallyTrustedCallersAttribute,这需要.Net唱歌,我不能强迫我的用户。
溶液2(优选的)
序列化的dll对象,将其保存到数据库中,反序列化和呼叫IDataManipulate.Execute。
问题:
反序列化后,我尝试将其转换为IDataManipulate对象,但返回错误查找实际的dll文件。
解决方案3个
保存到数据库的DLL字节的byte []和每次用户启动我的应用程序时重新创建DLL在本地PC上。
问题:
Dll可能有依赖关系,我不知道我是否可以检测到。
任何建议将不胜感激。
谢谢
@David,你是否尝试实施解决方案#2?因为如果我可以避免在运行时创建DLL,它将是理想的。 – 2010-04-29 16:40:43
如果使用AssemblyResolve事件,则可以返回从任何流对象加载的程序集对象。这将允许您从数据库加载它,而不必先将其保存到磁盘。 – David 2010-04-29 17:58:29