Web サイトの展開で問題が発生しています。シャドウ コピーは、以前の展開の問題とサイトの展開後にオフになります。
具体的には、展開時にapp_offline.htm
、サイト/アプリケーションがオフラインであることをコピーして確認した後でも、ファイルbin/*.dll
がロックされていることがよくあります。
appdomain
シャドウ コピーをオフにしても、DLLがアンロードされたときに DLL のロックが解放されることを期待しapp_offline.htm
ます。
のコンテンツを削除しようとする直前に変更 ( への ) が取得されるのを防ぐことを目的とした一時的なweb.config
見つかったを展開しようとしました 新しい をコピーした後、
一時停止することさえあります。Stack Overflow
bin/
bin/
10s
web.config
?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<httpRuntime waitChangeNotification="300"
maxWaitChangeNotification="300"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
アプリケーション プール (プロセス) が dll のロックの所有者であることをハンドル ユーティリティで確認したw3wp.exe
ので、これがファイルを削除/上書きできない理由であると想定しています。アプリプールを手動でリサイクルすると、解放され、問題なく展開できます。残念ながら、展開プロセスの一部として、app_offline をコピーして web.config を変更することは可能ですが、IIS
appcmd のリサイクルを実行することは (アクセス許可/グループ ポリシーの理由から) できないため、Web だけでこのロックを解放できる必要がありapp_offline.htm
ます。構成。
シャドウ コピーをオンに戻すと、この特定の問題は「解決」されますが、DLL でロックがまだ保持されている場合。しかし、問題を先延ばししているだけなのだろうかと心配しています。古いdllのロックがappdomain
再度ロードされたときに解放されない限り?
プロセスIDをコピーしapp_offline.htm
てもw3wp
、ハードリサイクルのように変更されませんが、ロックされているappdomain
ものを解放する必要があるものをアンロードしていると思います。bin/ files
もう 1 つの興味深い点は、これは実稼働サーバーでのみ発生するように見えることです。ローカルまたは開発/ステージング サイトで再現することはできません。app_pools
またはconfigとの構成の違いはないと思いますが、IIS
これが原因でこの動作が発生する可能性があります。
また、明確にするためshadowCopyBinAssemblies
に、この問題が発生することなく(同じ展開プロセスで)3年以上falseに設定されているため、最近起こった何かがこれを引き起こしたように感じますが、何が原因かわかりません.
これを解決する方法、または何が原因であるかについてのアイデアをありがとう。
(サーバーはIIS7
またはだと思います7.5
)