iis 无法在其他项目更新包版本后加载文件

enyaitl3  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(128)

我们在IIS上托管了2个项目:Blazor WebAssembly站点和授权Web服务。Web服务作为单独的站点托管在默认网站Blazor项目上。每个Web服务都有自己的应用程序池(“无托管代码”)。两者都是使用EF Core的.NET6。它们不相互引用。
最近我更新了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服务没有直接引用Microsoft.EntityFrameworkCore.Abstractions,但我可以在EF Core的包引用行中看到它。我可以在服务器上的物理文件夹中看到相关的库,它的预期版本是6.0.5。
尽管如此,Web服务器在任何GET上都会抛出,无论是使用Swagger还是通过Blazor网站。
目前已尝试:

  • 为站点和服务文件夹添加IIS_IUSRS权限
  • 正在更改Web服务的应用程序池标识
  • 为应用程序池特定用户添加对站点和服务文件夹的权限
  • 在IIS中启用32位应用设置,它与我们的应用不兼容
  • 检查ASPNET用户是否有权访问Temp文件夹,以防万一

问题仍然发生,在一些日子里,它都工作没有问题。

2vuwiymt

2vuwiymt1#

出现此错误的原因有很多,您可以尝试以下方法:
1.重新启动服务器以重新加载所有内容,检查网站是否正常工作。
1.在应用程序池的高级设置中将“启用32位应用程序”从false更改为true。
1.将您的应用正在使用的AppPool的标识更改为NetworkService。
IIS〉应用程序池〉选择当前应用程序池〉高级设置〉标识。
1.授予IIS_IUSRSMicrosoft.EntityFrameworkCore.Abstractions的完全访问权限。

mitkmikd

mitkmikd2#

将Web服务的托管模型设置为OutOfProcess最终解决了此问题。其他解决方案未提供任何持久的结果。
它可以在web.config中设置:

<aspNetCore ... hostingModel="outofprocess">

相关问题