将组件/模块加载到动态组件中

时间:2012-07-28 06:42:57

标签: c# cil reflection.emit dynamic-assemblies

我有一个已经创建的程序集,比如Static.dll,以及我在运行时创建的动态程序集,比如DynamicDynamic创建一些IL代码以从Static.dll创建新类型。创建Dynamic(它成功保存)后,可执行文件在运行时会因为无法加载程序集Static.dll类型而出错。我相信这是发生的,因为Dynamic exe输出找不到这个dll(或者至少这是我的猜测)。

如何完成添加此Static.dll引用,以便当有人运行Dynamic的结果可执行输出时,它可以找到引用的类型?

我知道Assembly.Load(),但仅凭这一点并没有改变任何事情。或者至少,我不确定这给了我什么,因为我不需要在运行时使用该类型,而是在运行Dynamic可执行文件时。

最后,我控制Static.dll,所以如果我可以用项目来修复它,可以这样做,但是,它确实需要保持独立(我不想发出这个库每次我创建一个动态组件)。基本上,我我希望我的动态程序集中有一个.assembly extern mscorlib,显式保存Static是mscorlib的位置。

由于

1 个答案:

答案 0 :(得分:2)

  

如何完成添加此Static.dll引用,以便当有人运行Dynamic的结果可执行输出时,它可以找到引用的类型?

将自动添加引用。请注意,正常的程序集探测规则适用于动态程序集执行时,因此要查找程序集。你必须(其中之一):

  • 与dynamic.dll一起发送static.dll
  • 将static.dll放入GAC(但请:不要这样做!)
  • 在自定义AppDomain中运行dynamic.dll,其中包含可以找到static.dll的自定义探测路径配置
  • 处理AppDomain.AssemblyResolve以提供static.dll
  • 使用类似ILMerge的东西来融合static.dll和dynamic.dll