Ошибка компиляции 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? Я также получил некоторые действительно странные ошибки компилятора, которые были вызваны тонкой несовместимостью (основные методы не реализованы и т.д.).