将程序集/模块加载到动态程序集中
-
13-12-2019 - |
题
我已经创建了一个程序集 Static.dll
, ,以及我在运行时创建的动态程序集,比如说 Dynamic
. Dynamic
创建一些 IL 代码来创建新类型 Static.dll
. 。什么时候 Dynamic
创建后(保存成功),可执行文件在运行时出错,因为它无法加载程序集 Static.dll
类型。我相信自从 Dynamic
exe输出找不到这个dll(或者至少这是我的猜测)。
如何完成添加这个 Static.dll
引用,以便当有人运行生成的可执行输出时 Dynamic
它可以找到引用的类型吗?
我知道关于 Assembly.Load()
, ,但这本身并不能改变任何事情。或者至少,我不确定这会给我带来什么,因为我不需要在运行时使用该类型,而是在运行时使用该类型 Dynamic
可执行的。
最后,我控制 Static.dll
, ,所以如果我可以对项目做一些事情来修复它,它可以完成,但是,它确实需要保持独立(我不想每次创建动态程序集时都发出这个库)。基本上,我 思考 我想让我的动态装配有一个 .assembly extern mscorlib
在它的清单保存中 Static
是mscorlib的位置。
谢谢
解决方案
如何完成添加这个
Static.dll
引用,以便当有人运行生成的可执行输出时Dynamic
它可以找到引用的类型吗?
参考文献将自动添加。请注意,当动态程序集执行时,将应用正常的程序集探测规则,以便找到程序集。您必须(其中之一):
- 将 static.dll 与dynamic.dll 一起发布
- 将 static.dll 放入 GAC 中(但请:不要这样做!)
- 使用自定义探测路径配置在自定义 AppDomain 中运行dynamic.dll,以便找到 static.dll
- 处理AppDomain.AssemblyResolve以提供static.dll
- 使用ILMerge之类的东西来融合static.dll和dynamic.dll
不隶属于 StackOverflow