SharePoint的OWSTIMER服务保留对功能接收器程序集的引用

使用SharePoint,您可以使用功能接收器在安装/卸载功能时执行某些操作。 功能接收器是从OWSTIMER服务运行的,过程似乎是粗略的 .wsp(一个cab文件)被解压缩并检查 .dll被移动到bin / gac 清单中标记的功能接收器由服务调用(只能在GAC中) 但是,OWSTIMER会在包含功能接收器的dll上打开句柄。 这意味着当您卸载功能时,Fusion会将dll移动到c: windows temp 目录并仍然保留引用。 (更多细节在这里和这里) 然后,当您尝试安装新版本(程序集文件版本不同但程序集版本必须保持不变)时,OWSTIMER将运行OLD功能接收器。 您可以通过重新启动OWSTIMER服务来停止这种情况,但这在可能有许多Web服务器的生产服务器场环境中是不实际的。 有人知道任何变通方法吗?     
已邀请:
在交换功能之间做一个iisreset。 是的,关闭所有网络应用程序,但这就是为什么你计划中断/在数小时内完成。并确保您的开发机器上的过程得到了很好的排练。     
没有解决方法,但在您拥有许多服务器的生产环境中,您不应该从GAC手动GAC和非GAC的DLL。 如果通过功能体系结构进行部署,SharePoint将自动处理此问题。 也就是说,如果需要在服务器场中的多个服务器之间同步Windows服务(包括OWSTIMER和IIS)的启动/停止,就像编写要使用的批处理脚本一样简单:
SC \SERVER1 STOP W3SVC
SC \SERVER1 STOP SPTIMERV4
SC \SERVER2 STOP W3SVC
SC \SERVER2 STOP SPTIMERV4
然后使用以下命令重启:
SC \SERVER1 START SPTIMERV4
SC \SERVER1 START W3SVC
SC \SERVER2 START SPTIMERV4
SC \SERVER2 START W3SVC
    

要回复问题请先登录注册