c#关闭程序集实例
当我使用Assembly.LoadFile方法时,在我的程序关闭之前,我对加载到程序集中的文件没有外部访问权限。另一方面,StreamReader允许我在使用完c#关闭程序集实例,c#,.net,reflection,C#,.net,Reflection,当我使用Assembly.LoadFile方法时,在我的程序关闭之前,我对加载到程序集中的文件没有外部访问权限。另一方面,StreamReader允许我在使用完StreamReader.close()方法后关闭流 在使用Assembly.Load时,有什么方法可以做同样的事情吗 谢谢, 埃文:不,那是故意的 如果要“卸载”程序集,必须将其加载到单独的AppDomain中 如果您只想释放文件,可以先将其加载到字节[]中,然后使用(已弃用的)assemly.load(byte[]rawAssemly
StreamReader.close()
方法后关闭流
在使用Assembly.Load时,有什么方法可以做同样的事情吗
谢谢,
埃文:不,那是故意的
如果要“卸载”程序集,必须将其加载到单独的AppDomain中
如果您只想释放文件,可以先将其加载到
字节[]
中,然后使用(已弃用的)assemly.load(byte[]rawAssemly)
方法。您可以将程序集加载到单独的AppDomain中,然后卸载AppDomain-这是唯一的方法。您可以将DLL文件读入字节[]
(调用File.ReadAllBytes
),然后使用字节数组调用Assembly.Load
程序集将不会卸载,但您可以删除该文件。这是不可能的。
在stackoverflow中看到另一个。
看这个
有关@BrokenGlass解决方案,请参见。使用
AppDomain.CreateDomain()
将程序集加载到新的应用程序域,并将其与AppDomainSetup
类的新实例一起使用,其卷影复制属性设置为true
这将复制要加载到目录中的程序集,并将加载副本,而不锁定原始程序集。如果要在完成程序集后进行清理,请使用AppDomain.Unload(domain)
或者,您可以使用Assembly.Load(File.ReadAllBytes(“path”))