2017-10-19 46 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被捆绑在一起。我们的应用程序被部署到负载平衡的环境中。我们的自动部署脚本使用'robocopy'来清除应用程序目录(下面的mywebapp),并将新内容复制到它的位置。

典型的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 

我们已经观察到,如果在部署期间应用程序不服务请求,那么部署成功完成。然而,如果应用程序是部署在负载和服务请求之下的应用尽快部署完成后会因每个后续请求中的例外:

未处理的异常处理的POST https://websiteName/application/endpoint:系统。 IO.FileLoadException 无法加载文件或程序集'FSharp.Core,Version = 4.3.1.0, Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其 依赖项之一。 定位的程序集清单定义与程序集引用不匹配。 (异常来自HRESULT:0x80131040) - 在WebAppFunction.Execute ... ..(ETC)

看到这个异常后,我们检查了应用程序二进制文件,发现FSharp.Core.dll版本是4.3.1.0(即升级版已经正确地部署) 。看起来,如果在部署期间提供流量,新部署的应用程序即使存在于应用程序bin文件夹中也找不到正确的FSharp.Core.dll版本。看起来该应用程序可能仍然有一些旧版本的FSharp.Core.dll版本。

服务器重新启动,IISReset或回收IIS应用程序池后此问题仍然存在。我们的解决方案是将部署回滚到之前的版本(FSharp.Core.dll v4.3.0.0),之后应用程序恢复。然后,我们将新版本(使用FSharp.Core.dll v4.3.1.0)部署到每台服务器,同时从负载均衡器中拉出apppool并停止,从而确保在部署过程中无负载,并且新版本成功部署。

无论程序集版本是否升级,我们在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> 

你所描述的那个错误(在部署的确切时间虽不)之前发生给我们,上面是什么总是解决它。

相关问题