7

多数の .Net プロジェクトをさまざまなサーバーにデプロイしています。これを行うために、私のチームは TFS を使用してビルドし、ビルド テンプレートから msdeploy を使用してすべての異なるサーバーにプッシュする ps1 スクリプトを呼び出します。それはすべて非常にエンタープライズであり、いいえ、現時点で別のものに切り替える自由はありません. このプロセスは何ヶ月も問題なく機能しています。

今日、展開はいくつかの異なるエラーで数回連続して失敗しました。それだけで私は混乱します(そして関連性がないかもしれません)が、今私が一貫して得ているものはこれです:

リモート コンピューターで要求が処理されたときにエラーが発生しました。「C:\Builds\SomeDirectory\obj\Debug\Package\PackageTmp\AReferencedProject.dll」のストリーム データはまだ利用できません。

このエラーは、スクリプトが msdeploy を実行するときに発生します。dllはWindowsサービスで使用されていますが、サービスは停止しており(私が知る限り、サービス停止はエラーをスローしていません)、dllは「読み取り専用」ではありません。dll は、構築/展開しているマシンと展開先のマシンに存在します。

展開先のサーバーから「使用できない」dll を削除すると、このエラーを回避できることがわかりましたが、展開する前にこの dll を手動で削除しない限り、その後の展開ごとに問題が発生します。

この問題を見たことがありますが、Azure にプッシュするのではなく、Windows Server 2008 にプッシュするだけです。Microsoft Web デプロイ (msdeploy) がこのエラーをスローする理由を知っている人はいますか?

4

3 に答える 3

3

この問題は、SQLite.Interop.dll (Web アプリケーションで ELMAH によって使用されます) で一貫して発生しています。 ELMAH であり、何らかの理由でこの DLL はシャドウ コピーされません。私たちが使用している解決策は、ここで推奨されている、デプロイのたびにアプリ プールをリサイクルすることです。コマンドは次のようになります。

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site/ourApp",computerName="DeployComputer"

これにより、展開パッケージを同期する後続の msdeploy が成功します。誰かがそのフォーラムに返信して、「-enableRule:AppOffline」の使用を提案しましたが、これは試す必要はありませんでした。

于 2013-11-13T17:34:13.063 に答える