LibGit2Sharp DllNotFoundException: 无法加载 DLL 'git2-106a5f2'

14

我正在进行一个vsix项目,在其中需要获取有关本地git目录的信息。我正在遵循这篇文章。当我使用LibGit2Sharp库时,我会得到如下图和错误所描述的异常:

我应该如何解决这个问题?

VS版本细节:

Visual Studio 2019

.Net Framework 4.7.2


1
这是一个非常奇怪的dll名称,看起来可能来自某个预览版本。检查实际的程序集名称,并以此作为参考进行构建。 - Richard
@Richard,您能否具体说明一下?当我浏览LibGit2Sharp时,程序集名称不可用。 - Tanmay Bairagi
你是如何引用libgit的? - Richard
您可以通过访问此处的代码文件 here 查找引用细节。我刚刚从NuGet安装了LibGit2Sharp,然后在这里实现了它。我正在使用repo本地路径调用GetRepositoryInformationForPath方法。就是这样。 - Tanmay Bairagi
我有完全相同的问题。 @TanmayBairagi,你找到解决办法了吗? - Jonas Johansson
5个回答

7

LibGit2Sharp是一个托管语言(.NET)封装的本地(C)库libgit2的包装器。它是一个P/Invoke层,加上一个为.NET提供语义(对象等)的层。这意味着,您需要同时使用LibGit2Sharp.dll(托管语言部分)和它调用的相应的本地库git2-xxxxxxx.dll

本地DLL是LibGit2Sharp依赖的LibGit2Sharp.NativeBinaries项目的一部分。当您安装LibGit2Sharp本身时,它应该被安装(传递依赖)。虽然它试图设置自己作为将安装在输出目录中的依赖关系,但由于本地二进制文件在.NET项目世界中并不被很好地理解,因此这有时可能会失败,特别是对于更复杂的项目类型,如VSIX。

最终,LibGit2Sharp将在其所在位置旁边查找相应的本地DLL。因此,在输出目录中,无论您的VSIX从哪里执行,请尝试将LibGit2Sharp.NativeBinaries项目中的git2-xxxxxxx.dll复制到该位置。

一旦确定了git2-xxxxxxx.dll二进制文件的正确位置,您应该将其作为项目安装的一部分进行复制。(例如Build action: None,Copy to output directory: Copy always)


我可以在 <project> -> bin -> debug -> lib -> win32 -> x64 和 x86 中找到这个dll。有两个文件git2-106a5f2.dllgit2-106a5f2.pdb。我试着把它们复制到项目的其他文件夹中,但什么都没用。还有其他解决办法吗? - Tanmay Bairagi

3
我遇到了同样的问题,我是这样解决的:
  1. 从“VisualStudioExtension->Bin->Debug->lib”中复制“dir”文件夹到“VisualStudioExtension”项目的根目录。该文件夹包含LibGit2Sharp所需的DLL文件。
  2. 将“lib”文件夹拖到Visual Studio中的“VisualStudioExtension”项目上。

enter image description here

  1. 选择dll文件,右键点击,选择属性,并将其设置为“始终复制”和“包含在VSIX中”。

enter image description here

那对我有用。

3

LibGit2Sharp 依赖于 git2-106a5f2.dll ,该文件位于 [Debug|Release]\lib\win32\[x86|[x64] 目录下。

如果缺少该特定版本,则可能需要重新安装 LibGit2Sharp 库,但在卸载和安装之间要卸载 LibGit2Sharp.NativeBinaries 库。

以下 NuGet 包的操作应该有所帮助:

  1. 卸载 LibGit2Sharp
  2. 卸载 LibGit2Sharp.NativeBinaries
  3. 安装 LibGit2Sharp

注意:即使有新版本,也不要更新 LibGit2Sharp.NativeBinaries


1
我遇到了相同的问题。结果发现我忽略了依赖项。 安装其依赖项:LibGit2Sharp.NativeBinaries 解决了我的问题。

1
对我而言,我手动安装了Debug和Release VSIX,并针对常规VS实例进行了测试,一切正常。只有在通过Visual Studio 2019 Exp版本调试我的代码时,LibGit2Sharp才会抛出DllNotFoundException异常。
因此,我删除了Visual Studio Exp版本的整个Extensions文件夹。这是Exp版本的VS安装所有插件的文件夹,就像其他版本的VS一样: %AppData%\Local\Microsoft\VisualStudio\16.0_a31c0a3aExp\Extensions 下次通过Visual Studio调试我的VSIX时,它就可以工作了。希望这可以帮到你,我认为这与该文件夹内的extensions.en-US文件有关。仅删除我的插件文件夹而不是Extensions文件夹什么也没做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接