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