私のウェブサイトはD:\RW_System\RW_Webroot\BrokerOffice.Admin
フォルダに設定されています(下のスクリーンショット)。 .NET、C#WebFormsアプリケーションです。
何らかの理由で、変更をサイトに展開したい場合は、ファイルをコピーしようとしますが、IISは、サイトがセットアップされているパスのDLLをロックします。
C:\Users\rizzo\Desktop>handle64 hiqpdf
Nthandle v4.11 - Handle viewer
Copyright (C) 1997-2017 Mark Russinovich
Sysinternals - www.sysinternals.com
w3wp.exe pid: 3700 type: File 2954: D:\RW_System\RW_Webroot\BrokerOffice.Admin\bin\HiQPdf.dll
ロックされているのは.dllだけではありません-\bin
フォルダ内のすべてのDLLです。私の理解は、IISがC:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\
の下のフォルダにすべてをコピーし、そこから物事を実行したことでした。
複数のDLL=参照があるボックスに他のサイトがいくつかあり、予想どおり、w3wp.exeはそれらをTemporary ASP.NET Files
フォルダにロックしています。
IISまたはIISが原因で/ binフォルダー内のDLLがロックされる原因となっているコードに何か設定がありますか?
誰かがこの問題に遭遇した場合に備えて、私の質問に答えます。 web.configファイルには<hostingEnvironment shadowCopyBinAssemblies="false" />
ディレクティブ。存在さえ知らなかった。
この設定は、IISで、Temporary ASP.NET Files
フォルダ。
サイトを展開する準備を整えるための迅速で信頼性の高い方法は、App_Offline.htm(~/App_Offline.htm
)と呼ばれるファイルをWebサイトのルートフォルダーに作成することです。 App_Offline.htmが削除されるまで、コンテンツが存在する場合、コンテンツはすべてのリクエストに対して提供されます。このメソッドは、shadowCopyBinAssemblies
に使用される値を含め、ほとんどすべてのケースで機能します。
基本的に、App_OfflineはIISの機能であり、Web配置で正しく配置できるようにするために使用されます-ロックの問題などを回避します。IISでは非常に低いレベルで動作しているようです。文字通りファイルです。アプリプールを強制終了するシステムウォッチャー。つまり、このテキストファイルを自分で簡単に作成して削除し、アプリを停止して再起動(または少なくとも再度有効にする)するためのWeb展開を行う必要はありません。
MS docsから取得:
ASP.Netは、「App_Offline.htm」という名前のファイルが存在することを検出すると、アプリケーションをホストしているアプリドメインを自動的に停止します。公開プロセスが完了すると、App_Offline.htmファイルが削除され、サイトが再びオンラインになります。
アプリケーションのオフライン化に関するMicrosoftの記事 を参照してください。
更新-22/5/2019
App_offlineファイルを作成することで指摘する価値があるかもしれません。
w3wp.exe
のインスタンスの終了につながる一連のイベントを開始します。これは、「アプリドメイン」です(タスクマネージャーに表示されます)。つまり、ロックの所有者です。そのプロセスが終了すると、すべてのロックが解放されます。私の経験では、それは通常非常に迅速です。いくつかの高トラフィックサイトの個人的/苦い経験に基づいており、絶対的な最後の手段として...何らかの理由でIISサイトがロックを停止/解放しない/既存のリクエストを中止しない場合)ロードまたはプロセスの終了をブロックする何か-app_offlineは、通常の状況下でサイトを非常に迅速に強制終了します。これらのケースでは、リクエストが完了しないことがわかっているか、気にせずにサイトを停止または再起動する必要がある場合は、アプリを作成しますオフラインファイル、タスクマネージャーを使用してw3wp.exeプロセスを強制終了し、変更を実行してから、アプリのオフラインファイルを削除します。次のリクエストにより、新しいアプリドメインが開始されます(保留中のリクエストは明らかに破棄されます。これを行う場合は注意してください)。サイトによっては問題にならない)。
ビジュアルスタジオの問題のようです。
構成マネージャーの「リリース」および「デバッグ」オプションをいじっているときに、同じエラーが発生し始めました。
Binおよびobjフォルダーも削除しようとしましたが、dllファイルがIIS Express worker processによってロックされていたため、成功しませんでした。
運が悪いのにビジュアルスタジオを再起動しようとした。
最後に、構成を「デバッグ」に変更してアプリケーションをコンパイルしたところ、エラーや警告なしにビルドが成功しました。
その後、構成を "Release"に戻しても、dllファイルのロックエラーは表示されませんでした。だから、おそらくそれはビジュアルスタジオの内部バグです。