Мастер публикации с Visual Studio не включает собственные двоичные файлы libgit2.

Я пытаюсь опубликовать свое приложение с помощью инструмента публикации из Visual Studio. Когда я создаю приложение, каталог NativeBinaries с libgit2 для x86 и amd64 хорошо копируется в каталог сборки bin/Release, поэтому приложение отлично работает в моей среде разработки.

Проблема в том, что с помощью мастера публикации для создания приложения ClickOnce собственные двоичные файлы не интегрированы, поэтому у меня есть ошибка на другом компьютере:

System.DllNotFoundException: Impossible de charger la DLL 'git2-e0902fb': Le   module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)
   à LibGit2Sharp.Core.NativeMethods.git_libgit2_init()
   à LibGit2Sharp.Core.NativeMethods.LibraryLifetimeObject..ctor()
   à LibGit2Sharp.Core.NativeMethods..cctor()

LibGit2Sharp.dll.deploy правильно копируется в каталог Application Files в конце процесса публикации.

Я испробовал множество решений, которые нашел, например, создать ссылку с файлами .dll или использовать событие публикации или предварительной сборки.

IDE: Visual Studio 2013 Express для рабочего стола Windows.

LibGit2Sharp.0.21.0.176 устанавливается вместе с NuGet.


person Cyril    schedule 29.06.2015    source источник
comment
Хммм. Это не похоже на проблему, связанную с программированием. Больше похоже на потенциальную отсутствующую функцию в отношении того, как мы взаимодействуем с конвейером публикации. Не могли бы вы внести запись в систему отслеживания ошибок?   -  person nulltoken    schedule 29.06.2015
comment
Спасибо, открыл новую тему.   -  person Cyril    schedule 29.06.2015
comment
Связанная проблема: github.com/libgit2/libgit2sharp/issues/1126   -  person nulltoken    schedule 29.06.2015


Ответы (1)


Причина, по которой собственные двоичные файлы не включены в манифест ClickOnce, заключается в том, что их действие сборки установлено в None пакетом NuGet LibGit2Sharp.NativeBinaries. Мастер публикации включает только файлы, для которых установлено значение Content.

Вы можете связать папку NativeBinaries из пакета NuGet со своим проектом и установить для действия сборки значение Content, но вам придется поддерживать это вручную каждый раз при обновлении пакета.

Другой вариант — вручную добавить файлы в манифест ClickOnce, используя процедуру, описанную здесь.

Однако лучшим вариантом, вероятно, будет вообще избегать использования ClickOnce. Вместо этого я рекомендую взглянуть на Squirrel.

person Brandon Ording    schedule 30.06.2015