c# - 在 .Net Core API 中使用 ASMX 服务:System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型
问题描述
尝试启动部署在 IIS 上的 .Net Core API 应用程序时,日志文件出现以下错误。根据许多帖子(IIS 中的配置更改等)尝试了许多解决方法,但仍然无法解决此问题。特别尝试添加日志以使用此链接查找特定丢失的 dll,与ASP.NET Core MVC 应用程序中的 .Net Core ReflectionTypeLoadException相关
- 创建了一个 ExceptionCatchMiddleware 扩展类。
- 在 Startup.cs 的 Configure() 方法中添加它:
但它没有记录任何与此异常相关的特定日志消息。日志中只有上述错误。
这是一个 .Net Core API 应用程序(带有 Visual Studio 2017 的 Net Core 2.0)。在 Windows 10 和 Windows Server 2012 R2 的 IIS 上部署。日志文件中存在相同的错误。
我在这里发现的主要问题是:这个项目添加了对 SOAP 服务(asmx 服务)的引用。删除此服务引用时,不会出现此类错误。似乎应用程序正在尝试从其他地方获取相关的 dll,而不是从已发布的文件夹中获取。可能来自 GAC。但也将与“system.servicemodel.*”相关的 dll 复制到 GAC(这些是通过 Visual Studio 中的连接服务添加该服务引用时自动添加的 dll(来自 Nuget))。
这仅在部署后(在 IIS 上)发生。从源代码运行此应用程序时,这工作正常。没有这样的错误。我不确定这些新版本的 .Net Core 部署后是否不支持 asmx 服务。
感谢解决此问题的任何帮助,因为我们需要此项目中的 asmx 服务参考。谢谢你。
2018-10-01T10:10:42.6383743+01:00 0HLH7FMNJ4U50:00000002 [ERR] 连接 ID ""0HLH7FMNJ4U50"",请求 ID ""0HLH7FMNJ4U50:00000002"":应用程序引发了未处理的异常。(560e7d32) System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。在 System.Reflection.RuntimeModule.GetTypes(RuntimeModule 模块) 在 Microsoft.AspNetCore.Mvc.ApplicationParts 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(IEnumerable1 部分,ControllerFeature 功能) 的 System.Reflection.RuntimeAssembly.get_DefinedTypes()。 Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider 上的 ApplicationPartManager.PopulateFeature[TFeature](TFeature 功能)。
PS:我可以解决这个问题。我在下面的评论中添加了我找到的解决方案。
解决方案
我可以通过在 .Net Core 2.0 项目中包含一个 .Net 标准项目来解决这个问题(在 .Net Core 项目中添加了 .Net 标准项目引用)。
推荐阅读
- excel - 如何将文件夹中的所有文件附加到电子邮件 - vba 代码
- laravel - CORS Laravel VueJS
- excel - 根据单元格值删除行不起作用
- c# - 使用 EF 6 和 MySQL 加载多个孙子集合时出错
- javascript - 函数不是函数?
- javascript - 为 JSON 声明一个变量
- java - JAX-RS POST NullPointerException
- wordpress - 目前,wordpress 提供一个 example.com,但我想从 example.com/blog 和 nginx 提供服务
- linux - 无法使用 sudo 命令,因为 pam_open_session 模块未知
- cassandra - 压缩需要多少可用磁盘空间?