FSharp.Core.dll
をIIS 8(ASP.NET Web API)でWebアプリケーションの展開の一部としてアップグレードし、展開直後にFSharp.Core FileLoad例外が発生する。 FSharp.Core.dll
バージョンは4.3.0.0
から4.3.1.0
になりました。IISアプリケーションへの展開中にFSharp.Coreバージョンをアセンブルするときにアセンブリ参照エラーが発生する
標準の自動展開では、アプリケーションフォルダの内容を更新されたバイナリ(dll)、global.asax、およびweb.configに置き換えて、IISがアプリケーションプールをリサイクルするようにします。 FSharp.Core.dll
はビルドの一部としてバンドルされています。当社のアプリケーションは負荷分散された環境に展開されます。私たちの自動展開スクリプトは、アプリケーションディレクトリ(以下のmywebapp)をパージして新しい場所にコピーするために 'robocopy'を使います。
典型的なIISアプリケーションフォルダ構造:
mywebapp/bin/fsharp.core.dll
mywebapp/bin/custom-fsharp-lib.dll
mywebapp/bin/custom-csharp-lib.dll
mywebapp/bin/System.Web.Http.dll, etc…
mywebapp/global.asax
mywebapp/web.config
我々は、アプリケーションが展開中の要求にサービスを提供されていない場合は、展開が正常に完了したことを観察しました。アプリケーションに負荷がかかっていると展開中に要求を処理する場合は、は、アプリケーションはすぐに展開が完了すると、後続の各要求に対して例外をスロー:
https://websiteName/application/endpointのための未処理の例外処理POST:システム。 IO.FileLoadException ファイルまたはアセンブリ 'FSharp.Core、Version = 4.3.1.0、 Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'またはその 依存関係のいずれかをロードできませんでした。 見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040) - WebAppFunction.Execute ... ..(など)で
この例外を見た後、私たちは、アプリケーションバイナリをチェックしFSharp.Core.dll
バージョンは(すなわちアップグレードされたバージョンが正しく展開されていた)4.3.1.0
だったことを見ました。デプロイ時にトラフィックを処理すると、新しくデプロイされたアプリケーションはアプリケーションのbinフォルダに存在していても正しいFSharp.Core.dll
のバージョンを見つけることができません。アプリケーションには、古いFSharp.Core.dll
バージョンのハンドルがまだ残っているようです。
この問題は、サーバーの再起動、IISResetまたはIIS apppoolのリサイクルの後も続きます。私たちのソリューションは、デプロイメントを以前のビルド(FSharp.Core.dll v4.3.0.0
)にロールバックしてから、アプリケーションが回復したというものでした。その後、新しいサーバービルド(FSharp.Core.dll v4.3.1.0
)を個別に各サーバーに展開し、アプリケーションプールを停止してロードバランサから引き出し、展開中に負荷がなくなり、新しいビルドが正常に展開されるようにしました。
アセンブリバージョンがアップグレードされているかどうかにかかわらず、Webアプリケーションの展開中にこの動作を観察したことはありません。他の人がFSharp.Core.dll
でこの問題に遭遇したことがありますか?