9

Microsoft の Web Deploy Remote Agent サービスを使用して、Visual Studio 内からサーバーにコードを簡単に公開できるようにしています。

私が展開している Web サイトは、log4net を使用してメッセージをログ ファイルに記録しています。コードの新しいバージョンを展開しようとするたびに、現在の log4net ログ ファイルが使用中であることを示す次のエラーが Visual Studio に表示されます。

リモート コンピューターで要求が処理されたときにエラーが発生しました。ファイル「Web.log」は使用中です。

別のプロセスで使用されているため、プロセスは 'C:\inetpub\wwwroot\Logs\Web.log' にアクセスできません。

サーバーにアクセスしてiisreset公開する前にこれを解決できます...しかし、それはVisual Studioからの「簡単な」公開のポイントを打ち負かしています:)

パブリッシュ タスクで iisreset を自動的に発行する方法、またはこれを回避する方法はありますか?

4

2 に答える 2

9

私はいろいろ調べてみたところ、他のいくつかのフォーラムでロックされているファイルに関するちょっとした情報を見つけました。追加してみましたか

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

web.config<appender>ファイルの要素に? Apache ドキュメントから

AcquireLock/ReleaseLock サイクルごとに 1 回ファイルを開き、最小限の時間ロックを保持します。このロック方法は、FileAppender.ExclusiveLock よりもかなり低速ですが、ログの継続中に他のプロセスがログ ファイルを移動/削除できます。

パフォーマンスに関する考慮事項に関しては、これが影響するかどうかをテストする必要があると思います。これがパフォーマンスにどの程度影響するかについては、ログファイルに書き込む頻度に実際に依存すると想定しているためです。ただし、ロックの取得/解放にそれほど時間がかかるとは信じられません

于 2013-04-24T13:45:45.353 に答える
6

これに正確に使用される MSDEPLOY プロバイダーが呼び出されます。recycleAppこれを配置マニフェストに含めることができます。

もう 1 つのオプションは、使用ignoreOnErrors中のファイルをスキップしてデプロイを続行するフラグを使用することです。

于 2013-04-28T16:28:47.693 に答える