c#关闭程序集实例

时间:2011-08-04 13:31:45

标签: c# .net reflection

当我使用Assembly.LoadFile方法时,在程序关闭之前,我没有外部访问加载到程序集中的文件。另一方面,StreamReader允许我在使用StreamReader.Close()方法完成使用时关闭流。

使用Assembly.Load时,有什么方法可以做同样的事情吗?

谢谢,

埃文

5 个答案:

答案 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)

这是不可能的。 在stackoverflow中查看此其他post。 请参阅此article

对于@BrokenGlass'解决方案,请参阅here