0

我正在使用单声道在 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 是我发现上面报告的错误消息的地方。谁能给我一个提示会是什么问题?

4

1 回答 1

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

任何人,我只是希望其他人可以从我的经验中受益。

于 2013-07-07T08:48:18.307 回答