无法启动mono-service2守护程序 - “/usr/local/lib/mono/2.0/mscorlib.dll”中缺少方法

时间:2013-07-07 06:37:45

标签: mono mono-service

我正在使用mono编写C#中的守护进程。到目前为止,我设法实现了我的逻辑和所有,并在控制台程序中测试它就好了。我在Windows XP中使用MonoDevelop 4.0.9并在那里编译,然后将文件移动到CentOS进行测试。我在CentOS上手动编译了mono 3.0.12,我可以毫无问题地在那里测试我的控制台程序。我的项目包含几个包含我的逻辑的库(.net dll文件),我在两个可执行项目中使用相同的文件;控制台和守护进程。

当控制台平稳运行时,守护程序在启动时输出以下错误:

Missing method System.Threading.Monitor::Enter(object,bool&) in assembly /usr/local/lib/mono/2.0/mscorlib.dll, referenced in assembly /usr/bin/wssd/Base.dll

这很奇怪,因为我编译了Mono / .Net 4.0的所有项目。只是强调,两个运行共享相同的库文件列表,它们唯一的区别是可执行文件:Console.exeWSSDaemon.exe

以下是我打电话给他们的方式:

$ mono ./Console.exe
$ mono-service2 -d:$WORK_DIR -l:$PIDFILE -m:$SERVICE_NAME -n:$SERVICE_NAME $DAEMON --debug > /tmp/wssd_log.txt

wssd_log.txt是我发现上面报告的错误消息的地方。任何人都可以给我一个提示,问题是什么?

1 个答案:

答案 0 :(得分:1)

我设法找到了问题,我不得不使用mono-service而不是mono-service2。事实证明,mono-service2适用于.Net 2和mono-service适用于.Net 4.5!您可以使用以下命令对此进行测试:

grep exec `type -p mono-service` | head -n 1

哪个输出:

exec /usr/local/bin/mono $MONO_OPTIONS /usr/local/lib/mono/4.5/mono-service.exe $args

,而

grep exec `type -p mono-service2` | head -n 1

输出:

exec /usr/local/bin/mono $MONO_OPTIONS /usr/local/lib/mono/2.0/mono-service.exe $args

Anywho,我只是希望别人可以从我的经历中受益。