DNX Kestrel出现“System.EntryPointNotFoundException: uv_loop_size”错误

6

我正在尝试运行一个由yo aspnet创建的未修改的Web Api应用程序。

我遇到了这个错误:

System.EntryPointNotFoundException: uv_loop_size
  at (wrapper managed-to-native) Microsoft.AspNet.Server.Kestrel.Networking.Libuv+NativeDarwinMonoMethods:uv_loop_size ()
  at Microsoft.AspNet.Server.Kestrel.Networking.Libuv.loop_size () <0x42615b8 + 0x00014> in <filename unknown>:0 
  at Microsoft.AspNet.Server.Kestrel.Networking.UvLoopHandle.Init (Microsoft.AspNet.Server.Kestrel.Networking.Libuv uv) <0x4261528 + 0x0002b> in <filename unknown>:0 
  at Microsoft.AspNet.Server.Kestrel.KestrelThread.ThreadStart (System.Object parameter) <0x4261160 + 0x0005f> in <filename unknown>:0 

有什么想法吗?

dnvm 列表输出:

Active Version              Runtime Architecture OperatingSystem Alias
------ -------              ------- ------------ --------------- -----
       1.0.0-rc1-final      coreclr x64          darwin          
       1.0.0-rc1-final      mono                 linux/osx       
  *    1.0.0-rc2-16177      mono                 linux/osx       default

mono版本

Mono JIT compiler version 4.2.1 (explicit/6dd2d0d Tue Nov 10 18:01:18 EST 2015)

更新

我运行了

 export DYLD_FALLBACK_LIBRARY_PATH=/Users/Andy/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-rc1-final/runtimes/osx/native/

最终在运行dnx web时,出现了不同的错误:

System.DllNotFoundException: libc.dylib
  at (wrapper managed-to-native) System.IO.KeventWatcher:kqueue ()
  at System.IO.KeventWatcher.GetInstance (IFileWatcher& watcher) <0x105a29310 + 0x000f3> in <filename unknown>:0 
  at System.IO.FileSystemWatcher.InitWatcher () <0x105a28fa0 + 0x0012c> in <filename unknown>:0 
  at System.IO.FileSystemWatcher..ctor (System.String path, System.String filter) <0x105a28d00 + 0x00114> in <filename unknown>:0 
  at System.IO.FileSystemWatcher..ctor (System.String path) <0x105a28cc0 + 0x00023> in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.FileSystemWatcher:.ctor (string)
  at Microsoft.AspNet.FileProviders.PhysicalFilesWatcher..ctor (System.String root) <0x105a285b0 + 0x00154> in <filename unknown>:0 
  at Microsoft.AspNet.FileProviders.PhysicalFileProvider..ctor (System.String root) <0x105a282d0 + 0x000e4> in <filename unknown>:0 
  at Microsoft.AspNet.Hosting.HostingEnvironmentExtensions.Initialize (IHostingEnvironment hostingEnvironment, System.String applicationBasePath, IConfiguration config) <0x105a27f20 + 0x001ea> in <filename unknown>:0 
  at Microsoft.AspNet.Hosting.WebHostBuilder.Build () <0x105a1a860 + 0x000b8> in <filename unknown>:0 
  at Microsoft.AspNet.Hosting.WebApplication.Run (System.Type startupType, System.String[] args) <0x105560990 + 0x00216> in <filename unknown>:0 
  at Microsoft.AspNet.Hosting.WebApplication.Run (System.String[] args) <0x10555fef0 + 0x0001a> in <filename unknown>:0 
  at Microsoft.AspNet.Hosting.Program.Main (System.String[] args) <0x10555fec0 + 0x00014> in <filename unknown>:0 
  at Microsoft.AspNet.Server.Kestrel.Program.Main (System.String[] args) <0x10555fc90 + 0x000b5> in <filename unknown>:0 
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x1050027a0 + 0x000b7> in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () in <filename unknown>:line 0
   at Microsoft.Dnx.Runtime.Common.EntryPointExecutor.Execute (System.Reflection.Assembly assembly, System.String[] args, IServiceProvider serviceProvider) in <filename unknown>:line 0
   at Microsoft.Dnx.ApplicationHost.Program+<>c__DisplayClass3_0.<ExecuteMain>b__0 () in <filename unknown>:line 0
   at System.Threading.Tasks.Task`1[TResult].InnerInvoke () in <filename unknown>:line 0
   at System.Threading.Tasks.Task.Execute () in <filename unknown>:line 0

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
   at System.IO.FileSystemWatcher.Stop () in <filename unknown>:line 0
   at System.IO.FileSystemWatcher.Finalize () in <filename unknown>:line 0

关于您的更新:libc.dylib位于/usr/lib,不确定您是否已经设置了现有的"DYLD_FALLBACK_LIBRARY_PATH",'export DYLD_FALLBACK_LIBRARY_PATH=/libuv/dir/locaation:/usr/lib:$DYLD_FALLBACK_LIBRARY_PATH'以便您不会重置现有的DYLD_FALLBACK_LIBRARY_PATH环境变量... - SushiHangover
我和Andy处于完全相同的情况(包括更新后的问题)。我尝试了你的建议@RobertN,将/usr/lib添加到环境变量中,但我又回到了最初的“uv_loop_size”错误。值得注意的是,在beta8中我没有遇到这个问题。只有在我更新到rc1-final之后才出现了这个问题。 - Kevin Craft
@KevinCraft,请查看下面答案线程中Pawel的评论,因为在RC版本中本地库加载已经改变 @ http://blog.3d-logic.com/2015/11/10/using-native-libraries-in-asp-net-5/ - SushiHangover
3个回答

3

注意:这与mono无关。

无法通过System.Net.Libuv装配程序找到libuv原生库:

https://github.com/dotnet/corefxlab/blob/d76ebe8ab5ed058d3d6903939ab0e4ee4e19b773/src/System.Net.Libuv/src/System/Net/Libuv/Interop.cs

第一步) 运行dnvm list -detailed以确定您正在使用的 dnx 运行时的位置,例如:

Active Version              Runtime Architecture OperatingSystem Alias   Location
------ -------              ------- ------------ --------------- -----   --------
       1.0.0-beta8          mono                 linux/osx               ~/.dnx/runtimes
       1.0.0-rc1-final      mono                 linux/osx               ~/.dnx/runtimes
  *    1.0.0-rc2-16177      mono                 linux/osx       default ~/.dnx/runtimes

第二点) 我的dnx安装路径为$HOME/.dnx/runtime(默认设置),因此我可以运行find ~/.dnx/packages -name "libuv*"命令。

/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-beta8/runtimes/osx/native/libuv.dylib
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-beta8/runtimes/win10-arm/native/libuv.dll
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-beta8/runtimes/win7-x64/native/libuv.dll
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-beta8/runtimes/win7-x86/native/libuv.dll
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-rc1-final/runtimes/osx/native/libuv.dylib
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-rc1-final/runtimes/win10-arm/native/libuv.dll
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-rc1-final/runtimes/win7-x64/native/libuv.dll
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-rc1-final/runtimes/win7-x86/native/libuv.dll

一旦你找到了系统中libuv.dylib的位置,你可以设置环境变量DYLD_FALLBACK_LIBRARY_PATH为该目录:
export DYLD_FALLBACK_LIBRARY_PATH=/your/libuv/directory/location:$DYLD_FALLBACK_LIBRARY_PATH

再次运行您的dmvm命令:

dnvm exec 1.0.0-rc2-16177 dnx web

注意:

在OS-X上,libuv也可以通过brew稳定版本1.7.5获取,但我没有尝试过,因为微软没有对其构建的libuv.dylib进行版本控制,所以我不确定它是否为自定义版本...(?)

otool -L /Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-rc1-final/runtimes/osx/native/libuv.dylib
/Users/sushi/.dnx/packages/Microsoft.AspNet.Server.Kestrel/1.0.0-rc1-final/runtimes/osx/native/libuv.dylib:
    /Users/asplab/Documents/buildAgent/temp/buildTmp/fs-poll-5b0daf.out (compatibility version 0.0.0, current version 0.0.0)

你确定它不是 DYLD_FALLBACK_LIBRARY_PATH 而不是 DYLIB_FALLBACK_LIBRARY_PATH 吗? - AndyD
@AndyD,你说得对,这就是我随意打字而不是剪切/粘贴的结果;-) 我已经更正了答案,谢谢。 - SushiHangover
@Pawel,太棒了,感谢提供信息,我没有想到要查看子模块...但我仍然希望版本信息能够被存根为“当前版本0.0.0”,这可以告诉我是否拥有正确的版本;-) - SushiHangover
如果您在定义多个路径时没有使用“冒号”而是使用其他分隔符,我完全预料到原始错误会再次出现... - SushiHangover
@Pawel,我宁愿出现dylb加载失败,以便了解它是项目.lock.json中kestrel配置问题,也不愿从路径中选择未知版本……这对我们在生产环境中来说是可怕的。 - SushiHangover
显示剩余8条评论

0

如果有人在这里寻找其他解决方案...

我尝试了上面所有的方法,包括多次重新安装所有内容和更新PATH,但都没有成功,最后按照这里的解决方案切换到CoreCLR,终于成功了!

dnvm install 1.0.0-rc1-update1 -r coreclr -arch x64

dnvm use 1.0.0-rc1-update1 -r coreclr -arch x64

dnvm list

然后,回到你的项目并再次尝试

dnx web

0

在多次重新安装Mono、Visual Code、Xamarin Studio、DNX、libuv、升级Node以及RoberN给我提供了一些清晰的指示后,我想我应该检查一下我的PATH环境变量。

果然,当我将/usr/lib/:/usr/local/lib添加到我的PATH中时,一切都开始正常工作了!

dnx web

Hosting environment: Production
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

成功!


有趣的是...如果 /usr/lib/:/usr/local/lib 加入我的 PATH,那么微软正在进行一些非标准的 dyld 路径探测,因为你不应该将 lib 目录包含在你的“执行”路径中... - SushiHangover
如果这个方法可行的话,那么在非Windows平台上应该将其报告为一个bug。 - SushiHangover
我对我的路径应该包含什么或不包含什么并不太熟悉,但是是的,它可以工作。 有没有想法在运行dnx web时记录文件访问以查看它实际上看起来像Windows上的procmon? - AndyD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接