我正在使用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.exe
和WSSDaemon.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是我发现上面报告的错误消息的地方。任何人都可以给我一个提示,问题是什么?
答案 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,我只是希望别人可以从我的经历中受益。