Как использовать libgit2sharp с Xamarin.Mac?
Я пытаюсь использовать замечательную библиотеку libgit2sharp на Mac. Поэтому я использую Xamarin Studio для создания приложения Mac для чтения информации из репозитория Git.
Когда я использую библиотеку в обычном моно исполняемом файле (цель Mono / .NET4.5
все просто отлично работает. Но когда я создаю проект Xamarin.Mac, возникает следующая ошибка, и я не вижу пути обхода:
Unhandled Exception:
System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception. ---> System.DllNotFoundException: git2-a5cf255
at (wrapper managed-to-native) LibGit2Sharp.Core.NativeMethods:git_libgit2_init ()
at LibGit2Sharp.Core.NativeMethods+LibraryLifetimeObject..ctor () [0x00006] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
at LibGit2Sharp.Core.NativeMethods..cctor () [0x00058] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
--- End of inner exception stack trace ---
at LibGit2Sharp.Core.Proxy.git_repository_open (System.String path) [0x00008] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
at LibGit2Sharp.Repository..ctor (System.String path, LibGit2Sharp.RepositoryOptions options, LibGit2Sharp.Repository+RepositoryRequiredParameter requiredParameter) [0x0007e] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception. ---> System.DllNotFoundException: git2-a5cf255
at (wrapper managed-to-native) LibGit2Sharp.Core.NativeMethods:git_libgit2_init ()
at LibGit2Sharp.Core.NativeMethods+LibraryLifetimeObject..ctor () [0x00006] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
at LibGit2Sharp.Core.NativeMethods..cctor () [0x00058] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
--- End of inner exception stack trace ---
at LibGit2Sharp.Core.Proxy.git_repository_open (System.String path) [0x00008] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
at LibGit2Sharp.Repository..ctor (System.String path, LibGit2Sharp.RepositoryOptions options, LibGit2Sharp.Repository+RepositoryRequiredParameter requiredParameter) [0x0007e] in <9f09b2b30ef34f0b8a3a0a6bdde2be90>:0
При поиске в поисках я обнаружил, что многие темы заканчиваются "сборкой libgit2sharp на вашем компьютере, чтобы получить правильные файлы.dylib". Это могло быть проблемой в прошлом, но не больше, так что это не помогло мне. Как я уже сказал, я могу легко использовать libgit2sharp с моно исполняемым файлом.
Кстати, я не могу использовать пакет Nuget "libgit2sharp", потому что он говорит, что цель Xamarin.Mac несовместима. Я использую пакет "libgit2sharp.portable", который не выдает ошибки во время установки или компиляции. Это просто сообщение об ошибке сверху во время выполнения.
Мой образец приложения доступен для загрузки здесь: https://files.fm/u/7eq55jjq
Любые предложения, чтобы обойти это? Спасибо!
Обновление Ошибка может указывать на то, что путь к dylib неверен ("DLL не найдена"), но это не так. Файл именно там, где и должен быть.
2 ответа
Боже мой, я был так близко. и Philippe тоже был там: Неправильно размещать файл dylib в папках выходного каталога (как это делает пакет Nuget автоматически), что /lib/osx/libgit2-1196807.dylib
,
Вместо этого я обнаружил, что файл dylib должен быть помещен в файл *.app. Но вместо того, чтобы делать это вручную, в Xamarin Studio предусмотрена функция "Native References" для проектов Xamarin.Mac.
Я должен был увидеть это "Родные ссылки" раньше. Извините, ребята, но, возможно, это кому-то поможет.
Я почти уверен, что проблема заключается в том, что нативные библиотеки, входящие в отдельный пакет nuget 'Libgit2sharp.NativeBinaries', не копируются в выходную папку (должны находиться в подкаталоге 'lib').
Копия обычно выполняется целью во время сборки проекта.