Ошибка компиляции Weird Mono

Я использую IKVM для получения SVNKit в проекте Mono, с которым я работаю, у меня есть класс, который реализует интерфейс из SVNKit, и я не могу скомпилировать:

В Windows и .NET все прекрасно компилируется, просто получая это на Mono.

/home/nubela/Workspace/subsync/subsync/Core/Subversion/PropGetHandler.cs(22,22): Ошибка CS0535: Subsync.Core.Subversion.PropGetHandler' does not implement interface member org.tmatesoft.svn.core.wc.ISVNPropertyHandler.__ <clinit> () ` (CS0535) (subsync)

Я использовал метод googled __<clinit>() и, похоже, это метод инициализации для базового класса в библиотеке Java, составленном из IKVM.

У меня нет подсказки, как двигаться дальше, какие-нибудь идеи?:)

Ответы

Ответ 1

Я собираюсь рискнуть во многих downvotes и предложить другое решение, то есть, по моему мнению, намного лучше... Я действительно не понимаю, почему вы используете библиотеки Java в приложении .NET, если в .NET есть много альтернатив и хорошие альтернативы.

Почему бы вам не использовать библиотеку svn, которая является родной для .NET, например Svn.NET? Это будет намного больше быстрее. Если у вас есть существующий код с помощью SVNKit, вы можете преобразовать его в Svn.NET или просто создать для него некоторые обертки.

Рыба не может жить за пределами воды, верно? Он может жить только в своей природной среде, воде. Итак, SVNKit, должен жить в своей естественной среде... Java, а не .NET. SVNKit в .NET похож на человека на Марсе, и это нормально, но я предпочел бы человека на земле.

Svn.NET поддерживает следующие платформы:

  • .NET 2.0 на Win32
  • Моно на Win32 (2.0 framework)
  • Mono on Linux (2.0 framework)

Обратите внимание, что .NET/Mono 3.5 является просто расширением до 2.0, поэтому он будет работать либо на 3.5.

Зачем запутываться? Это будет гораздо проще для вас.

Ответ 2

Если у вас есть доступ к коду в библиотеке Java, вы можете правильно реализовать метод __().

Метод void __() {} - компилируется просто отлично. Если это не поможет, вы можете предоставить образец кода, который воспроизводит ошибку?

Ответ 3

Поскольку ваш класс может работать с компилятором Microsoft, это должно быть ошибкой в ​​компиляторе Mono или во время выполнения.

Вы можете использовать сборки, созданные с компиляторами Microsoft с Mono на любой платформе.

Я могу предложить два обхода:

a) Создайте вспомогательную сборку svnkitutil.dll в Windows. Это будет содержать реализацию по умолчанию ISVNPropertyHandler и любые другие проблемные интерфейсы. Затем вы реализуете интерфейс путем подкласса реализации по умолчанию.

Это может по-прежнему сбой с той же проблемой.

b) Измените источники Java, чтобы удалить статическое поле в интерфейсе (ISVNPropertyHandler.NULL).

Это может быть много работы, если это общий шаблон в SVNKit.

Ответ 4

Я собираюсь задать здесь очевидный вопрос..., но вы запустили свой код через moma http://www.mono-project.com/MoMA? Я также получил некоторые действительно странные ошибки компилятора, которые были вызваны тонкой несовместимостью (основные методы не реализованы и т.д.).