我正在通过将服务器嵌入其中来开发一个自我维持的 Web 应用程序。其中一个服务器是由XSockets提供支持的 WebSocket 服务器。
如果我xbuild
解决了然后mono Application.exe
- 按预期工作。
如果我然后mkbundle --deps -o nancy-xsockets.so Application.exe ...
(注意-o
在同一个目录中,...
实际上是所需程序集的路径)并按./nancy-xsockets.so
预期运行它。
然后,如果我mkbundle --deps -o MKBUNDLE/nancy-xsockets.so Application.exe ...
(注意-o
NOT BEING 在同一目录中)并运行MKBUNDLE/nancy-xsockets.so
- 它按预期工作。
现在,如果我cd MKBUNDLE
然后./nancy-xsockets.so
我受到这个错误的欢迎:
Unhandled Exception:
System.TypeInitializationException: An exception was thrown by the type initializer for XSockets.Plugin.Framework.Composable ---> System.IO.DirectoryNotFoundException: Directory '/usr/lib/mono/gac/XSockets.Plugin.Framework/1.4.3.0__e0d515f22052a108' not found.
at System.IO.Directory.ValidateDirectoryListing (System.String path, System.String searchPattern, System.Boolean& stop) [0x00000] in <filename unknown>:0
at System.IO.Directory.GetFileSystemEntries (System.String path, System.String searchPattern, FileAttributes mask, FileAttributes attrs) [0x00000] in <filename unknown>:0
at System.IO.Directory.GetFiles (System.String path, System.String searchPattern) [0x00000] in <filename unknown>:0
at System.IO.Directory.GetFiles (System.String path, System.String searchPattern, SearchOption searchOption) [0x00000] in <filename unknown>:0
at XSockets.Plugin.Framework.Composable+<>c__DisplayClass9.<AddLocation>b__8 (System.String fi) [0x00000] in <filename unknown>:0
at System.Linq.Enumerable+<CreateSelectManyIterator>c__Iterator12`2[System.String,System.String].MoveNext () [0x00000] in <filename unknown>:0
at XSockets.Plugin.Framework.Composable.AddLocation (System.String assemblyLocation, SearchOption searchOption, Boolean ignoreException) [0x00000] in <filename unknown>:0
at XSockets.Plugin.Framework.Composable.SetPluginCatalog () [0x00000] in <filename unknown>:0
at XSockets.Plugin.Framework.Composable..cctor () [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at Core.Bootstrap.XSocket (Int32 port) [0x00000] in <filename unknown>:0
at Core.Bootstrap.Start (Int32 nancyPort, Int32 xSocketPort) [0x00000] in <filename unknown>:0
at Core.Startup.Main (System.String[] args) [0x00000] in <filename unknown>:0
Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
at Core.Bootstrap.Dispose () [0x00000] in <filename unknown>:0
at Core.Startup.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
at Core.Bootstrap.Dispose () [0x00000] in <filename unknown>:0
at Core.Startup.Main (System.String[] args) [0x00000] in <filename unknown>:0
当工作目录没有.dll
' 时,似乎会发生这种情况。
感觉好像 XSockets 找不到配置并且正在回退到默认值。
我该如何解决这个问题?
更新:
值得注意的是mkbundle
,我真的指示它把所有东西打包在一起。我最终得到了一个可执行文件“nancy-xsockets.so”,当我运行它时,它会因上述消息而出错。假设 Uffe 的回答可能会有所帮助,显而易见的选择是将可执行文件的根路径添加到 Composable,但在我的情况下Composable.AddLocation
似乎没有帮助 - 同样的错误。
我期待看到问题可能出在哪里,因为如果*.dll
程序集与一个目录中的单个可执行文件一起使用,它似乎可以工作(可能会加载它们而不是查看捆绑的程序集)。我开始*.dll
一个一个地删除文件,直到我偶然发现它正是XSockets.Plugin.Framework.dll
.
所以,如果我有这些内容:
[root@web-apps Release]# ls
modules nancy-xsockets.so
随后调用:
[root@web-apps Release]# ./nancy-xsockets.so
最终会出现如上所示的错误。
但是,如果我有:
[root@web-apps Release]# ls
modules nancy-xsockets.so XSockets.Plugin.Framework.dll
以下调用完美运行:
[root@web-apps Release]# ./nancy-xsockets.so
Looking for modules in: /root/stoneos-nancy-xsockets/Release/modules
Starting Nancy on: 1337, XSockets on: 1338
Adding path /root/stoneos-nancy-xsockets/Release to XSockets Composable
XSockets and Nancy started.
Press any key to exit.
这似乎是 XSockets 中的一个问题,更具体地说,XSockets.Plugin.Framework.Composable
. 它的静态构造函数似乎正在调用SetPluginCatalog
,然后它正在调用AddLocation
并且可能在mkbundle
d.
有没有办法禁用这个“默认”位置?