作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在执行一项任务,我必须加载 dll 并从中获取一些信息,例如类名等...但是当我将该 dll 加载到我的代码中时,它被锁定并且无法从中构建源代码,直到我关闭加载程序,我已经尝试了某些解决方案,但没有一个对我有用
Shadowcopy:在这种情况下,当我对程序集进行影子复制时,然后如果我更改了某些内容
我的主要 dll 在我的加载应用程序中它仍然是旧的。
System.Reflection.assembly.loadfrom(System.IO.GetBytes("asm-path"));//有时但不总是工作
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/
我是一名优秀的程序员,十分优秀!