有没有办法释放使用后期绑定(bind)访问的对象(即由 Activator.CreateInstance()
方法创建)?
我有一个应用程序可以将文件从一种格式转换为另一种格式。执行这些翻译的程序集位于我的应用程序目录中的一个文件夹中。
当应用程序首次启动时,我可以从翻译文件夹中删除这些程序集而不会出现任何错误。但是,一旦我通过应用程序处理文档(并使用后期绑定(bind)绑定(bind)到其中一个翻译程序集),我就无法再删除翻译程序集。此时,我收到一条错误消息,指出该文件“正在被另一个应用程序使用”。
有没有办法在我使用完后在我的应用程序中“释放”延迟绑定(bind)对象?
最佳答案
程序集加载到应用程序域后,它将一直保留到应用程序域关闭。
要解决此问题,请将程序集加载到它自己的应用程序域中,例如:
AppDomain app = AppDomain.CreateDomain("PlugInDomain");
ObjectHandle objectHandle = app.CreateInstanceFrom(assemblyPath,
"MyNamespace.MyComponent");
MyComponent component = (MyComponent) objectHandle.Unwrap();
// do stuff
// Now kill app domain, assembly can be overwritten after this.
AppDomain.Unload(app);
关于c# - 在 C# 中释放后期绑定(bind)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3925756/