libgit2 / libgit2/libgit2sharp

Unable to load DLL 'git2'

オープン
#1,656 コメント 6 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
C#
スター
3.5k
フォーク
925
PR マージ指標
30日以内にマージされた PR はありません

説明

Hi All,

I know there are a number of similar issues listed, but non quite fit my scenario.

I have a system (that I cant change) that stores code and dlls (binary blob) in a database. The data is extracted and a VS Solution is generated. As such I do not have the ability to use NuGet or to force the git2-4aecb64.dll into the specific folders required for it to work.
Additionally the git2.dll is renamed (also out of my control) with a UID on the end.
eg. git2-4aecb64_Server_c8l_S0Kakc7Do5PhhDGPhxoObuMgSRw2detcnbwdOuQ.dll

So, based on other incidents raised, I understandably get the following error when the git-xxx.dll is included in the root folder next to LibGit2Sharp.dll

System.Web.Services.Protocols.SoapException: Server was unable to process request.
---> System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception. --->
System.DllNotFoundException: Unable to load DLL 'git2-4aecb64': The specified module could not be found. (Exception from HRESULT: 0x8007007E)at LibGit2Sharp.Core.NativeMethods.git_libgit2_init()at LibGit2Sharp.Core.NativeMethods.LibraryLifetimeObject..ctor()at LibGit2Sharp.Core.NativeMethods..cctor()
--- End of inner exception stack trace ---

Does anyone have any suggestions for resolving this?

Possibly a config item I can pass to LibGit2Sharp that would take a relative path to the git2.dll?

Or could I build a combined DLL?

Reproduction steps
  1. Create new VS 2017 c# console app
  2. Manually add Reference to LibGit2Sharp.dll and then copy git2-4aecb64.dll to the bin folder
  3. Try to Clone a Repository using below code
var cloneOptions = new CloneOptions { BranchName = "master", Checkout = true };
cloneOptions.CredentialsProvider = (_url, _user, _cred) => new UsernamePasswordCredentials { Username = username, Password = pass };
string localFolder = @"C:\Repos\test"; 
var cloneResult = LibGit2Sharp.Repository.Clone(url, localFolder, cloneOptions);
Expected behavior

Repository is cloned

Actual behavior

Exception is raised
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'git2-4aecb64': The specified module could not be found. (Exception from HRESULT: 0x8007007E)at LibGit2Sharp.Core.NativeMethods.git_libgit2_init()at LibGit2Sharp.Core.NativeMethods.LibraryLifetimeObject..ctor()at LibGit2Sharp.Core.NativeMethods..cctor() --- End of inner exception stack trace ---

Version of LibGit2Sharp (release number or SHA1)

Versions pulled from NuGet package
LibGit2Sharp - version="0.25.4"
LibGit2Sharp.NativeBinaries - version="1.0.252"

Operating system(s) tested; .NET runtime tested

Windows 10 with .Net 4.7

Thanks,

Basil

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

スタック トレースに示されている NativeMethods の初期化から始め、名前を変更した git2 DLL を使用して手動の VS 2017 セットアップを再現します。有用な解決策では、LibGit2Sharp が外部で名前を変更したそのバイナリの読み込みをサポートしているかどうかを明らかにするか、サポートされているデプロイ構成を明確にし、その後、Clone 呼び出しで DllNotFoundException が発生しなくなったことを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
csharp
領域
devtools
issue の種類
バグ
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
20/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。