gpt4 book ai didi

asp.net-core - 在 Windows 上使用 Kestrel 服务器运行 ASP.NET5 Web 应用程序

转载 作者:行者123 更新时间:2023-12-01 12:34:31 26 4
gpt4 key购买 nike

我已经使用 Windows 8.1 上的 Kestrel 服务器成功运行了 ASP.NET5 GitHub 存储库中的“HelloWeb”示例:

丹尼斯。红隼

现在我想用 kestrel 运行我自己的应用程序。我从 Visual Studio 2015RC 和几个直接使用 dnx 的运行时进行了尝试。结果总是:

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the
requested types. Retrieve the LoaderExceptions property for more information.
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at System.Reflection.RuntimeAssembly.get_DefinedTypes()
at Microsoft.AspNet.Hosting.Server.ServerLoader.LoadServerFactory(String serv
erFactoryIdentifier)
at Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplication()
at Microsoft.AspNet.Hosting.Internal.HostingEngine.Start()
at Microsoft.AspNet.Hosting.Program.Main(String[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Framework.Runtime.Common.EntryPointExecutor.Execute(Assembly ass
embly, String[] args, IServiceProvider serviceProvider)
at Microsoft.Framework.ApplicationHost.Program.ExecuteMain(DefaultHost host,
String applicationName, String[] args)
at Microsoft.Framework.ApplicationHost.Program.Main(String[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Framework.Runtime.Common.EntryPointExecutor.Execute(Assembly ass
embly, String[] args, IServiceProvider serviceProvider)
at dnx.host.Bootstrapper.RunAsync(List`1 args, IRuntimeEnvironment env)
at dnx.host.RuntimeBootstrapper.ExecuteAsync(String[] args)
at dnx.host.RuntimeBootstrapper.Execute(String[] args)

有什么方法可以找到无法加载的类型?

更新

这是project.json

{
"webroot": "wwwroot",
"version": "1.0.0-*",

"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-beta6-14023",
"Microsoft.AspNet.Server.IIS": "1.0.0-beta6-11864",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta6-12245",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta6-11996",
"EntityFramework.SqlServer": "7.0.0-beta6-13336",
"EntityFramework.Commands": "7.0.0-beta6-13336",
"Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta5-11337",
"Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta6-12521",
"Microsoft.AspNet.SignalR.Server": "3.0.0-beta6-12519",
"Microsoft.AspNet.Authentication.OAuthBearer": "1.0.0-beta4",
"Kestrel": "1.0.0-beta4"
},

"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000",
"kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004",
"ef": "EntityFramework.Commands"
},

"frameworks": {
"dnx451": { },
"dnxcore50": { }
},

"exclude": [
"wwwroot",
"node_modules",
"bower_components"
],

"publishExclude": [
"node_modules",
"bower_components",
"**.xproj",
"**.user",
"**.vspscc"
]

}

我尝试从 VS 中使用 Kestrel 启动它,并将 Kestrel 设置为使用以下运行时,这导致在 VS 中显示错误消息。

运行时:1.0.0-beta6-11921 .NET Framework x86

Exception thrown: 'System.Reflection.ReflectionTypeLoadException' in mscorlib.dll
Exception thrown: 'System.Reflection.TargetInvocationException' in mscorlib.dll
Exception thrown: 'System.Reflection.ReflectionTypeLoadException' in mscorlib.dll
Exception thrown: 'System.Reflection.ReflectionTypeLoadException' in Microsoft.Framework.ApplicationHost.dll
Exception thrown: 'System.Reflection.TargetInvocationException' in mscorlib.dll
Exception thrown: 'System.Reflection.ReflectionTypeLoadException' in mscorlib.dll
Exception thrown: 'System.Reflection.ReflectionTypeLoadException' in dnx.host.dll

最后更新

问题出在 kestrel 包版本上。无论出于何种原因,Nuget 经理只建议我使用 Kestrel beta 4,而所有其他软件包都安装为 beta 6。在 project.json 中手动将 Kestrel 设置为 beta 6 后,一切正常。我接受 Gerald Davies 的回答,因为他给了我正确的方向。

最佳答案

该错误似乎表明正在使用的运行时、应用程序预期的运行时以及可能适用于特定运行时的依赖项之间存在不匹配。

首先使用dnvm list 并验证正在使用哪个运行时(事件)。请在更新中发布。如果将错误的运行时设置为事件,您将需要使用 dnvm use 进行更改。还将此与您的解决方案的 global.json 中的值进行比较。

您可能需要恢复依赖关系。如果 VS 中的构建使用的运行时不同于 dnvm 设置为事件的运行时,就会发生这种情况。您可以通过 dnu restore 强制恢复依赖项。

“dnu restore”总是需要的,但 VS 有时会通过在依赖项更改时自动执行它来隐藏它,但仅限于 VS 正在执行的当前运行时。请记住,依赖项可能因运行时而异。

由于 VS 使用 global.json 来确定要针对哪个 dnx(版本、运行时和体系结构)执行,但在命令行上,除非明确指示 dnx/dnu 使用 dnvm 设置的“事件”运行时,因此这很复杂.从技术上讲,dnvm 只是将路径设置为特定的运行时,因此当使用执行 dnx 或 dnu 时,您将运行特定的运行时(版本、运行时和体系结构),具体取决于路径是什么。

关键是VS执行的dnx和你在命令行执行的dnx不一定相同。在 VS (global.json) 或 dnvm(使用 dnvm)中更改“目标”不会自动更新另一个。

因此,例如 VS 可能会自动恢复非核心 clr x86 dnx 的 beta4 版本的依赖关系,但是由于路径(由 dnvm 设置),当您在命令行上执行时,您正在针对核心 clr x64 的 beta6 版本执行.如果这些依赖项尚未恢复,那么您将收到错误消息。

关于asp.net-core - 在 Windows 上使用 Kestrel 服务器运行 ASP.NET5 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30919381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com