【发布时间】:2017-07-18 09:45:34
【问题描述】:
我们正在尝试将我们的 .Net 4.5 项目(Web-Api)移植到 .Net Core。
它对除我之外的每个开发人员都运行良好。此外,我们最近切换到 VS 2017 RC。
程序启动但在第一个请求时崩溃:
-InnerException {System.TypeLoadException: Method 'get_ContentLength' in type 'Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders'
from assembly 'Microsoft.AspNetCore.Server.Kestrel, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation.
at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.Reset()
at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.Start()
at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection.Start()
at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary.DispatchConnection(UvStreamHandle socket)
at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListenerPrimary.OnConnection(UvStreamHandle listenSocket, Int32 status)
at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener.ConnectionCallback(UvStreamHandle stream, Int32 status, Exception error, Object state)
at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle.UvConnectionCb(IntPtr handle, Int32 status)
at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.NativeMethods.uv_run(UvLoopHandle handle, Int32 mode)
at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.run(UvLoopHandle handle, Int32 mode)
at Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread.ThreadStart(Object parameter)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread.<StopAsync>d__45.MoveNext()} System.Exception {System.TypeLoadException}
我尝试了不同版本的 Microsoft.AspNetCore.Server.Kestrel 无济于事。 删除并重置了我所知道的 VS 的每个缓存并重新安装了 .NET Core 和 VS 2017 RC
项目文件:
<ItemGroup>
<PackageReference Include="adremes.Common" Version="1.3.0" />
<PackageReference Include="adremes.Data" Version="3.0.1" />
<PackageReference Include="AutoMapper" Version="5.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Routing" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Server" Version="0.2.0-preview2-22683" />
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="1.1.0-preview1-23121" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="1.1.0" />
<PackageReference Include="DocumentFormat.OpenXml" Version="2.7.1" />
<PackageReference Include="AspNet.Security.OpenIdConnect.Server" Version="1.0.0-beta7-final" />
<PackageReference Include="AspNet.Security.OAuth.Validation" Version="1.0.0-alpha3-final" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.1" />
<PackageReference Include="System.Runtime.Serialization.Primitives" Version="4.3.0" />
</ItemGroup>
【问题讨论】:
-
你是从那里拉
Microsoft.AspNetCore.WebSockets的吗?它不在官方的 nuget 源上,所以我猜你是从 myget 或私有存储库中提取它的。 nuget.org 上最新的Microsoft.AspNetCore.WebSockets是 1.0.0,所以我怀疑它正在使用它拉一些夜间构建的 ASP.NET Core -
这两个包之一可能是你的问题。有些东西正在引入更新版本的 http 抽象,这破坏了 kestrel。
标签: c# .net asp.net-core .net-core kestrel-http-server