2017-10-19 5 views
8

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でこの問題に遭遇したことがありますか?

答えて

0

あなたは、アセンブリがあなたのweb.configファイルにリダイレクト追加する必要があります:あなたが説明したエラー

<dependentAssembly> 
     <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" /> 
</dependentAssembly> 

は(ない展開の正確な時間の間にはあるが)前に、私たちに起こった以上何ました常にそれを解決します。

関連する問題