SharePoint では、フィーチャー レシーバーを使用して、フィーチャーがインストール/アンインストールされたときにいくつかのアクションを実行できます。
フィーチャー レシーバーは OWSTIMER サービスから実行され、プロセスは大まかに
- .wsp (cab ファイル) を解凍して調べる
- .dll は bin/gac に移動されます
- マニフェストでマークされた機能レシーバーは、サービスによって呼び出されます (GAC でのみ可能)。
ただし、OWSTIMER は、フィーチャー レシーバーを含む dll でハンドルを開いたままにします。
つまり、機能をアンインストールすると、Fusion は dll を c:\windows\temp\ ディレクトリに移動し、引き続き参照を保持します。(詳細はこちらとこちら)
次に、新しいバージョンをインストールしようとすると (アセンブリ ファイルのバージョンは異なりますが、アセンブリのバージョンは同じままにする必要があります)、OWSTIMER は OLD 機能レシーバーを実行します。
OWSTIMER サービスを再起動することでこの発生を停止できますが、多くの Web サーバーが存在する可能性がある実稼働ファーム環境では実用的ではありません。
回避策を知っている人はいますか?