我MEF
在基于插件的 ASP.NET 应用程序中使用。在复制到插件文件夹后,会自动加载File System Watcher
与任何新插件的连接。Container.Refresh()
问题是当我想删除或替换加载的插件时。它被锁定,w3wp
无法删除。我读过Shadow Copy
但找不到好的例子或文章。
我MEF
在基于插件的 ASP.NET 应用程序中使用。在复制到插件文件夹后,会自动加载File System Watcher
与任何新插件的连接。Container.Refresh()
问题是当我想删除或替换加载的插件时。它被锁定,w3wp
无法删除。我读过Shadow Copy
但找不到好的例子或文章。
尝试将插件文件夹添加到AppDomainSetup.ShadowCopyDirectories。此属性是以分号分隔的目录列表,其中包含应通过卷影副本加载的程序集。
通常您还需要将AppDomainSetup.ShadowCopyFiles设置为,"true"
但我认为这已经是 ASP.NET appdomains 的默认设置。
但是,请注意,加载新版本的插件不会神奇地卸载旧版本。唯一的方法是卸载包含它的 AppDomain。由于这需要您在单独的应用程序域中加载插件,这可能比它的价值更麻烦。
停止服务、更新 DLL 并重新启动可能更简单、更安全、更有效。
确保正确清理所有非托管资源。听起来您可能已经打开了一个文件流,但没有正确关闭/处理它,这可能会被最初使用它的进程锁定。using
有关此处声明的 更多信息:http: //www.blackwasp.co.uk/UsingStatement.aspx