gpt4 book ai didi

assemblies - 是否可以编写一个动态生成新类并用新类修补自身的程序集?

转载 作者:行者123 更新时间:2023-12-01 03:00:43 25 4
gpt4 key购买 nike

是否可以编写一个动态生成/发出新类并修补自身以包含新类的程序集?

如何?

最佳答案

我在这里用另一种方式问了这个问题:Using AssemblyBuilder, how can I make all or any of the referenced assemblies embedded instead of linked in the saved assembly?

用动态生成的代码修补现有的 dll 将导致与在动态生成的代码中嵌入原始 dll 相同的结果——一个包含两者内容的程序集。

似乎以一种或另一种方式消除依赖性并将多个程序集的内容打包成一个,ILMerge 实用程序是最优雅的解决方案。

唯一的问题是合并后的 dll 中生成的类型与两个原始 dll 中的相同类型不兼容。例如,如果原始 DLL 发出一个新程序集,将其与自身合并,然后加载新程序集……它不能使用自己的类型来引用新程序集中对应于任何一个中的相同类型的事物。原始组件。

换句话说:
[dll_generator] 中的 A 类引用了 [dll_1]。 A 类生成 [dll_2],它基于 [dll_1],当然也引用 [dll_1]。 A 类调用 ILMerge 将 [dll_2] 与其依赖项 [dll_1] 组合以生成 [dll_merged]。 [dll_merged] 中的任何类型都与 [dll_1] 和 [dll_2] 中的任何原始类型都不兼容,因此如果类 A 加载 [dll_merged] 并尝试对其执行任何涉及其原始引用的文字类型名称 [dll_merged] dll_1],它失败了,因为类型不兼容。类 A 可以使用 [dll_merged] 中的类型的唯一方法是按名称加载它们并完全使用“类型”对象和反射——或者针对新的 [dll_merged] 动态编译源代码。

关于assemblies - 是否可以编写一个动态生成新类并用新类修补自身的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/886094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com