首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态加载程序集AssemblyResolve问题

动态加载程序集AssemblyResolve问题
EN

Stack Overflow用户
提问于 2010-05-24 14:35:51
回答 2查看 829关注 0票数 0

注:这是我上一篇文章的续集:Complicated API issue with calling assemblies dynamically‏

我正在编写一个运行在网络上并使用Server保存和提取数据的.Net windows窗体应用程序。

我想提供一个迷你的“插件”API,开发人员可以在这里构建自己的程序集并实现特定的接口(IDataManipulate)。然后,我的应用程序可以使用这些程序集调用IDataManipulate.Execute()。

我决定采用解决方案3:

将dll字节保存为byte[]到数据库,并在每次用户启动应用程序时在本地PC上重新创建dll。

所以这就是我要做的

database.

  • Then,
  • My应用程序提示用户上载实现my接口(IDataManipulate)的.Net程序集(“主”程序集),并使用Assembly.GetReferencedAssemblies在Assembly.GetReferencedAssemblies中保存字节--我将获得引用程序集的列表,并将其字节保存在数据库中(“引用”程序集),前提是用户在同一个文件夹中提供实际文件。

问:如何从IDataManipulate.Execute()).

  • Then列表中识别系统程序集并将它们排除在外?当应用程序运行时,我从数据库中获取主程序集的字节,使用Assembly.Load(byte[])创建程序集,并使用CreateInstance( type ),其中类型是实现IDataManipulate的对象(因此我可以调用Assembly.GetReferencedAssemblies,我可以使用AppDomain.AssemblyResolve事件从数据库加载引用程序集的字节。)

所有操作都正常;除了这个问题之外,dll是加载的,我可以调用IDataManipulate.Execute():

问题

当我从主程序集中调用IDataManipulate.Execute()时,我会得到一个错误,例如“我不能从这个程序集加载xxxx类型”。无法加载的类型属于引用的程序集之一,而不是主程序集。

为什么会发生这种事?

有什么建议吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2010-05-24 14:42:04

要回答第一个问题,可以检查引用程序集的位置,并且只有在数据库位于同一个文件夹时才能将其添加到数据库中。

票数 1
EN

Stack Overflow用户

发布于 2012-03-30 21:51:23

有点晚,但也可以检查程序集的PublicKeyToken。我相信,.net有三种令牌。您可以通过查看windows框架文件夹找到它们。这样,如果需要,可以将程序集包含在其他文件夹中。

也就是说,我可能会要求开发人员将它们放在同一个文件夹中。如果他们决定包括大型第三方库,如不碎片整理或诸如此类。这样,它们就必须在导入之前将程序集明确地移动到文件夹中,从而使它们知道自己在做什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2897746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档