9

自動生成された PrecompiledApp.config が頭痛の種です。古い W​​eb サイトのデプロイを自動化していますが、デプロイするときに 50% の確率で次のエラーが発生します。

System.IO.IOException: The process cannot access the file '\\web.prod.local\c$\Sites\Website\PrecompiledApp.config' because it is being used by another process.

コンテンツ:

<precompiledApp version="2" updatable="true"/>

私の知る限り、Webサイトはシャドウコピー機能を使用して、app.configなどでサイトの「ランタイム」を更新できるようにしています。ただし、この1つのファイルは例外のようです。

展開中に Web サイトを停止する以外に、回避策を提案できる人はいますか?

敬具

4

1 に答える 1

1

エラー メッセージのパスから判断すると、展開中にネットワーク共有経由でファイルをコピーしようとしていることがわかります。これは、ネットワーク共有や FTP などを介してファイルを直接更新することは悪い習慣です。これが実際の理由です。ネットワーク展開が遅く、一部のファイルがまだ更新/アップロードされている間-サーバー上のASP.NETはすでにアプリをリサイクルしようとしており、ファイルを「一時的なASP.NETフォルダー」などにコピーしています。

導入のベスト プラクティス:

コンパイル済みのサイトを ZIP してアップロードし、サーバー上でリモートで UNZIP を実行します

UNZIP をリモートで実行する方法は次のとおりです。

plink -ssh -l USERNAME -pw PASSWORD web.prod.local c:\Sites\Website\unzip -q -o c:\Sites\Website\site.zip -d c:\Sites\Website\

「plink」は、開発マシンで必要な Windows (コマンドライン) 用の無料の SSH ツールです。

「web.prod.local」はサーバーアドレスです。

「c:\Sites\Website\」は、サーバー上の Web サイトのパスです。

コマンドをリモートで実行するには、サーバーにSSHをインストールする必要があります。最も簡単なオプションは、無料のツール「freesshd」(google it)をインストールすることです。

「unzip.exe」もサーバーにドロップすると、すぐに呼び出されていることがわかります。最も簡単な方法は、c:\Sites\Website\ にドロップすることです。

PS。これは単なる例です。独自のソリューションを考え出すことができます

于 2015-05-01T11:05:53.500 に答える