使用LibGit2Sharp构建项目,让它在.NET&单声道(Windows,Linux,Mac)

时间:2015-06-21 13:52:54

标签: libgit2sharp

使用LibGit2Sharp 0.22.0-pre20150606092322(使用NuGet),当我在Windows上构建项目时,NativeBinaries文件夹只包含.dll文件,我认为这些文件在Linux上不起作用(除非它们是.NET库)。试图在Linux上运行该项目会导致异常:

  

System.TypeInitializationException:LibGit2Sharp.Core.NativeMethods的类型初始化程序抛出异常---> System.DllNotFoundException:git2-ff8d635

我假设如果我尝试在Linux上构建我的项目,它将包含正确的库,但不包含Windows。有没有办法在一个系统上构建项目并提供适用于所有系统的下载?

编辑:实际上,我刚刚使用MonoDevelop在Linux上构建了项目。输出包含一个“packages”文件夹,其中包含一个子文件夹中的.so文件,但如果我像这样运行它,我仍会得到相同的异常。

1 个答案:

答案 0 :(得分:4)

由于您使用的是最新的预发布LibGit2Sharp软件包,因此您还应该拥有一个LibGit2Sharp.NativeBinaries软件包,其中包含LibGit2Sharp所需的本机git2库。在该软件包中,我们包含以下版本:

  • 32位Windows(dll)
  • 64位Windows(dll)
  • 32& 64位Mac(dylib),一个文件支持两种架构
  • 64位Linux(so)

如果您尝试在32位Linux上运行,那么就不会包含预先构建的库。你在运行什么发行版/架构?

安装LibGit2Sharp软件包时,会在项目中添加一个MSBuild属性文件,这就是处理将本机二进制文件复制到构建过程中的正确位置的原因。

如果你在linux上构建,那么构建输出应该包含与LibGit2Sharp.dll相同的目录中的libgit2-ff8d635.so。

只要您的项目没有执行需要对程序集进行阴影复制的操作,单元就可以找到并加载linux库。

如果你是,例如,如果它是一个asp.net项目,那么你必须确保本机linux库加载器可以通过设置LD_LIBRARY_PATH或实际安装它来找到.so文件。

就构建它而言,由于所有预构建的本机映像都已经存在于NativeBinaries包中,因此您的发布过程可以直接包含它们。