c# - 在 C# 中释放后期绑定(bind)对象

标签 c# reflection late-binding

有没有办法释放使用后期绑定(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/

相关文章:

c# - 使用 Reactive Extensions 时命名线程

javascript - 众所周知的符号不适用于函数

ruby - 获取构造函数的参数名称

c++ - 如何确定编译器是对虚函数使用早期绑定(bind)还是后期绑定(bind)?

c++ - 后期绑定(bind)有什么优点?举一个 C++ 函数指针上下文中的例子

c# - 无法将类转换为 ObservableCollection

javascript - C# 和 JS 中的 WebSocketServers - 乱码

c# - 如何更改应用程序的初始屏幕位置?

objective-c - 按名称创建objective-c类实例?

c# - "late-bound access to the destination object"是什么意思?