2013-07-07 4 views
0

Я пишу демона в C#, используя моно. Пока мне удалось реализовать свою логику и все, и проверить ее в консольной программе просто отлично. Я использую MonoDevelop 4.0.9 в Windows XP и компилирую его там, а затем перетаскиваю файлы в CentOS для тестирования. Я скомпилировал mono 3.0.12 на CentOS вручную, и я могу протестировать свою консольную программу там без проблем. Мой проект состоит из нескольких библиотек (DLL-файлов .net), которые содержат мою логику, и я использую те же файлы в двух исполняемых проектах; консоль и демон.Не удалось запустить демон mono-service2 - отсутствующий метод в «/usr/local/lib/mono/2.0/mscorlib.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 где я нашел сообщение об ошибке сообщалось выше. Может ли кто-нибудь дать мне подсказку, в чем проблема?

ответ

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, я просто надеюсь, что другие могут пользуюсь моим опытом.