C# 单声道';Linux上的mkbundle使用XSockets.Plugin.Framework.Composable-->;DirectoryNotFoundException

C# 单声道';Linux上的mkbundle使用XSockets.Plugin.Framework.Composable-->;DirectoryNotFoundException,c#,mono,xsockets.net,mkbundle,C#,Mono,Xsockets.net,Mkbundle,我正在开发一个自我维持的web应用程序,将服务器嵌入其中。其中一个服务器是由提供电源的WebSocket服务器 如果我xbuild解决方案,然后mono-Application.exe-按预期工作 如果我然后mkbundle--deps-o nancy-xsockets.so Application.exe…(注意-o在同一个目录中,..实际上是指向所需程序集的路径)并与/nancy xsockets一起运行,那么它就可以正常工作了 然后,如果我mkbundle--deps-o mkbundle

我正在开发一个自我维持的web应用程序,将服务器嵌入其中。其中一个服务器是由提供电源的WebSocket服务器

如果我
xbuild
解决方案,然后
mono-Application.exe
-按预期工作

如果我然后
mkbundle--deps-o nancy-xsockets.so Application.exe…
(注意
-o
在同一个目录中,
..
实际上是指向所需程序集的路径)并与
/nancy xsockets一起运行,那么它就可以正常工作了

然后,如果我
mkbundle--deps-o mkbundle/nancy-xsockets.so Application.exe…
(注意
-o
不在同一个目录中),并与
mkbundle/nancy xsockets一起运行,那么
-它可以正常工作

现在,如果我
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
随后呼吁:

[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时,该步骤可能会失败


有没有办法禁用这个“默认”位置?

我在Nancy方面没有经验,但我知道如果工作目录中没有程序集,那么在开始使用它之前,您必须告诉插件框架在哪里查找

例如,下面的一行将添加位置“c:\temp\test”,以便框架在那里查找程序集

Composable.AddLocation("c:\\temp\\test");
这应该在启动服务器之前完成。如果你在开始后这样做,你将不得不添加另一行

Composable.AddLocation("c:\\temp\\test");
Composable.ReCompose();

它需要什么组件<代码>mkbundle
,我认为,将它们组合在一起。请参阅更新。有没有办法禁用默认的
Composable
位置(由
SetPluginCatalog
设置)?
Composable.AddLocation("c:\\temp\\test");
Composable.ReCompose();