无法在另一个项目更新包版本后加载文件



我们在IIS上托管了两个项目:Blazor WebAssembly站点和授权web服务。Web服务作为一个单独的站点托管在Default Web Site, Blazor项目上。每个都有自己的应用程序池('无托管代码')。两者都是使用EF Core的。net 6。它们不相互引用。

最近我更新了Blazor项目中的包到最新版本。在发布这个更改后,我们的web服务开始抛出:

An unhandled exception has occurred while executing the request.
System.TypeInitializationException: The type initializer for 'Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder' threw an exception.
---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.EntityFrameworkCore.Abstractions, Version=6.0.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
File name: 'Microsoft.EntityFrameworkCore.Abstractions, Version=6.0.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder..cctor()

该web服务上的EntityFrameworkCore库是6.0.5版本。我们的Blazor网站被移到了6.0.6。一个如何影响另一个呢?

它们都被Jenkins作为自包含的而不进行修剪,然后复制到服务器。
Web service没有直接引用Microsoft.EntityFrameworkCore.Abstractions,但是我可以在EF Core的包引用中看到它。我可以在服务器的物理文件夹中看到相关的库,它的预期版本是6.0.5。
然而,web服务器抛出任何GET,与Swagger或通过Blazor站点。

try so far:

  • 为站点和服务文件夹添加IIS_IUSRS权限
  • 更改web服务的应用池标识
  • 为站点和服务文件夹添加应用池特定用户的权限
  • 在IIS中启用32位应用程序设置,它与我们的应用程序不兼容
  • 检查了asp.net用户对临时文件夹的权限,以防

问题仍然存在,有些日子一切正常。

出现此错误的原因有很多,您可以尝试以下方法:

  1. 重新启动服务器重新加载所有内容,检查站点是否正常工作

  2. 在应用程序池的高级设置中将'启用32位应用程序'从false更改为true。

  3. 将你的应用程序正在使用的AppPool的标识更改为NetworkService

    IIS祝辞应用程序池>选择当前应用程序池>高级设置>身份。

  4. 授予IIS_IUSRSMicrosoft.EntityFrameworkCore.Abstractions的完全访问权限。

将web服务的托管模型设置为OutOfProcess最终解决了这个问题。其他解决方案没有提供任何持久的效果。

可以在web.config中设置:

<aspNetCore ... hostingModel="outofprocess">