在.Net Core API中使用ASMX服务:System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型

时间:2018-10-02 09:20:48

标签: iis .net-core asmx

尝试启动IIS上部署的.Net Core API应用程序时,日志文件中出现错误消息。根据许多帖子(IIS中的配置更改等)尝试了许多变通办法,但仍然无法解决此问题。特别尝试使用此链接来添加日志以查找特定的丢失的dll,这些链接与.Net Core ReflectionTypeLoadException in ASP.NET Core MVC application

相关
  • 创建了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中的Connected Services添加该服务引用时自动添加的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模块)   在System.Reflection.RuntimeAssembly.get_DefinedTypes()   在Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(IEnumerable1部分,ControllerFeature功能)处Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(IEnumerable1部分,ControllerFeature功能) ()在Microsoft.AspNetCore.Mvc.Internal.ControllerActionAction.scriptProvider.BuildModel()在Microsoft.AspNetCore.Mvc.Internal.ControllerActionAction.scriptActionProvider.GetDescriptors()在Microsoft.AspNetCore.Mvc.Internal.ControllerAction。 Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider.UpdateCollection()(Microsoft.AspNetCore.Mvc.Internal.AttributeRoute.GetTreeRouter()处的Microsoft.AspNetCore.Mvc.Invc.Internal.AttributeRoute.RouteAsync Microsoft.AspNe上的(RouteContext上下文) tCore.Routing.RouteCollection.d__9.MoveNext()-从上一个引发异常的位置开始的堆栈跟踪--在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() (任务任务)在Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext()处-从上次引发异常的位置开始的堆栈结束跟踪-在System处System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处。 Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.d__11.MoveNext()处的Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)---从上次引发异常的位置开始的堆栈结束---在System.Runtime.ExceptionServices System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)的.ExceptionDispatchInfo.Throw(),Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.d__3.MoveNext ()---从先前抛出异常的位置开始的堆栈跟踪---位于Microsoft.AspNetCore的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处。 Server.Kestrel.Core.Internal.Http.Frame1.d__2.MoveNext()   2018-10-01T10:10:42.6385488 + 01:00 0HLH7FMNJ4U50:00000002 [INF]请求已在11.3774ms 500(791a596a)中完成

PS:我可以解决此问题。我在下面的评论中添加了找到的解决方案。

1 个答案:

答案 0 :(得分:0)

我可以通过在.Net Core 2.0项目中包含.Net标准项目(为.Net Core项目添加.Net标准项目参考)来解决此问题。