我正在处理一个任务,我必须加载DLL并从类名称等获取一些信息...但是当我将该DLL加载到我的代码中时,它被锁定并且无法从源代码构建,直到我关闭加载程序,我已经尝试了某些解决方案,但它们都不适合我
Shadowcopy:在这种情况下,当我影子复制程序集然后在那之后,如果我在
我的主dll中更改了某些东西,它在我的加载应用程序中仍然是旧的.
System.Reflection.assembly.loadfrom(System.IO.GetBytes( "ASM-路径")); //有时工作,但并不总是
System.Reflection.assembly.ReflectionOnlyConext(); //不起作用
有没有适当的解决方案
key*_*rdP 21
一种方法是读取文件的字节并使用Assembly.Load的重载,它接受类似于你在第二个例子中所做的字节数组.我不确定是什么System.IO.GetBytes,只是尝试一下File.ReadAllBytes.
byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = Assembly.Load(assemblyBytes);
Run Code Online (Sandbox Code Playgroud)
但是,根据您要执行的操作,这可能还不够,因为在装载后无法卸载装配.要解决此问题,如果需要,可以将程序集加载到自己的AppDomain中,然后在完成后卸载AppDomain.
AppDomain ad = AppDomain.CreateDomain("New_Assembly_AD");
byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = ad.Load(assemblyBytes);
Run Code Online (Sandbox Code Playgroud)
完成assembly对象后,可以卸载AppDomain.
AppDomain.Unload(ad);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5452 次 |
| 最近记录: |