Как использовать 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').

Копия обычно выполняется целью во время сборки проекта.

Другие вопросы по тегам