我通过创建一个新项目、导入代码和安装依赖项将项目从 .NET Framework 迁移到 .NET Core。一切都很顺利,除了 API 组件。以前我使用过System.Web.Http.Selfhost
,但是现在当我尝试运行该程序时,我得到以下异常:
System.TypeLoadException HResult=0x80131522 Message=无法从程序集“System.ServiceModel,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”加载类型“System.ServiceModel.HostNameComparisonMode”。Source=mBot StackTrace:在 C:\Users\maren\source\repos\mBot-Admin\mBot\Program.cs 中的 mBot.Program.d__2.MoveNext() 处:System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start [的第 70 行TStateMachine](TStateMachine& stateMachine) at mBot.Program.Run() at mBot.Program.Main(String[] args) 在 C:\Users\maren\source\repos\mBot-Admin\mBot\Program.cs:line 28
它发生在这一行,注释掉该行使程序成功启动:
https
://awau.moe/ad25d4.png
此时我应该注意的Config.BotConfig.ApiPort
是,8080
我也尝试使用 OWIN 托管的值是,如这似乎是更新的版本。我得到以下信息:
System.Reflection.TargetInvocationException HResult=0x80131604
Message=异常已被调用的目标抛出。
Source=System.Private.CoreLib StackTrace: 在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 在 Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context) 在 Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options) 在 Microsoft.Owin.Hosting.ServerFactory.ServerFactoryAdapter.Create(IAppBuilder builder)在 C:\Users\maren\source\repos\mBot-Admin\mBot\Program.cs 中的 mBot.Program.d__2.MoveNext() 处:System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处的第 47 行在 System.Runtime mBot.Program 中的 .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)。C:\Users\maren\source\repos\mBot-Admin\mBot\Program.cs 中的 Main(String[] args):第 28 行内部异常 1:HttpListenerException:访问被拒绝
我不介意我使用 OWIN 还是 Selfhost,只要它有效。
有谁知道这可能是什么原因?使用 8080 端口不是我的帐户的权限,我之前已经添加过,它仍然适用于旧代码。
我正在使用的当前代码位于https://gitlab.com/marens101/mBot-Admin/tree/rewrite/mBot
- 网络服务器的主要代码位于Program.cs
第 45-55 行。OWIN 和 SelfHost 都在那里,都被注释掉了。
- OwinStartup 对象位于API/OwinStartup.cs
更新:我现在将 ASP.NET Core 与 Kestrel 一起使用(感谢@Lex Li),除了应用程序不再关闭未处理的异常之外,这主要是有效的,这非常重要。相反,与我的其他 API 的连接已关闭,但网络服务器仍在运行,并且应用程序没有退出。有谁知道解决这个问题的方法?