当我使用Assembly.LoadFile方法时,在程序关闭之前,我没有外部访问加载到程序集中的文件。另一方面,StreamReader允许我在使用StreamReader.Close()
方法完成使用时关闭流。
使用Assembly.Load时,有什么方法可以做同样的事情吗?
谢谢,
埃文
答案 0 :(得分:6)
不,那是设计的。
如果你想'UnLoad'一个程序集,你必须将它加载到一个单独的AppDomain中。
如果您只想发布文件,可先将其加载到byte[]
并使用(已弃用)Assembly.Load(byte[] rawAssemly)
方法。
答案 1 :(得分:3)
使用AppDomain.CreateDomain()
将程序集加载到新的应用程序域中,并将其与AppDomainSetup
类的新实例一起使用,并将其shadow复制属性设置为true。 http://msdn.microsoft.com/en-us/library/ms404279.aspx
这将复制要加载到目录中的程序集,它将加载副本,使原始文件解锁。如果要在完成装配后进行清理,请使用AppDomain.Unload(domain)
。
或者,您可以使用Assembly.Load(File.ReadAllBytes("path"))
。
答案 2 :(得分:1)
您可以将程序集加载到单独的AppDomain中,然后卸载AppDomain - 这是唯一的方法。
答案 3 :(得分:1)
您可以将DLL文件读入byte[]
(调用File.ReadAllBytes
),然后使用字节数组调用Assembly.Load
。
不会卸载程序集,但您可以删除该文件。
答案 4 :(得分:0)