gpt4 book ai didi

c# - 在.net中加载dll而不锁定它

转载 作者:太空狗 更新时间:2023-10-29 20:47:31 26 4
gpt4 key购买 nike

我正在执行一项任务,我必须加载 dll 并从中获取一些信息,例如类名等...但是当我将该 dll 加载到我的代码中时,它被锁定并且无法从中构建源代码,直到我关闭加载程序,我已经尝试了某些解决方案,但没有一个对我有用

  1. Shadowcopy:在这种情况下,当我对程序集进行影子复制时,然后如果我更改了某些内容
    我的主要 dll 在我的加载应用程序中它仍然是旧的。

  2. System.Reflection.assembly.loadfrom(System.IO.GetBytes("asm-path"));//有时但不总是工作

  3. System.Reflection.assembly.ReflectionOnlyConext();//不起作用

有什么好的解决方法吗

最佳答案

一种方法是读取文件的字节并使用 Assembly.Load 的重载,它接收一个字节数组,类似于您在第二个示例中所做的。我不确定 System.IO.GetBytes 是什么,但尝试使用 File.ReadAllBytes

byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = Assembly.Load(assemblyBytes);

但是这可能还不够,这取决于您想要做什么,因为您无法在加载程序集后将其卸载。要解决此问题,如果需要,您可以将程序集加载到它自己的 AppDomain 中。然后在完成后卸载 AppDomain。

AppDomain ad = AppDomain.CreateDomain("New_Assembly_AD");
byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = ad.Load(assemblyBytes);

完成 assembly 对象后,您可以卸载 AppDomain。

AppDomain.Unload(ad);

关于c# - 在.net中加载dll而不锁定它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18935726/

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