使用LibGit2Sharp构建项目,并在.NET和Mono(Windows、Linux、Mac)上运行

使用LibGit2Sharp构建项目,并在.NET和Mono(Windows、Linux、Mac)上运行,libgit2sharp,Libgit2sharp,使用LibGit2Sharp 0.22.0-pre20150606092322和NuGet,当我在Windows上构建项目时,NativeBinaries文件夹只包含.dll文件,我假设这些文件在Linux上不起作用,除非它们是.NET库。尝试在Linux上运行项目会导致异常: System.TypeInitializationException:LibGit2Sharp.Core.NativeMethods-->System.DllNotFoundException:git2-ff8d635的

使用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文件,但是如果我只是这样运行它,我仍然会得到相同的异常。

因为您使用的是最新的预发行版LibGit2Sharp包,那么您还应该有一个LibGit2Sharp.NativeBinaries包,其中包括LibGit2Sharp需要的本机git2库。在该软件包中,我们包括以下版本:

32位Windows dll 64位Windows dll 32和64位Mac动态库,一个文件支持两种体系结构 64位Linux so 如果您正试图在32位linux上运行,那么就没有为此提供预构建库。您正在运行什么发行版/体系结构

安装LibGit2Sharp包时,会将MSBuild属性文件添加到项目中,这就是在生成过程中将本机二进制文件复制到正确位置的过程

如果您是在linux上构建,那么构建输出应该包含libgit2-ff8d635.so,它与LibGit2Sharp.dll位于同一目录中

只要您的项目没有执行需要卷影复制程序集的操作,mono就可以找到并加载linux库

如果是,例如,如果它是asp.net项目,则必须确保本机linux库加载器可以找到.so文件,方法是设置LD_library_路径,或者实际安装它


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

您是否可以共享一个公共的回购url以及复制步骤来重现此问题?忘了提及我使用的NuGet。这是回购协议:。我不确定你关于复制步骤的意思。我只是在Xamarin/MonoDevelop中构建项目。相关讨论:我尝试在我的Arch笔记本上构建项目。它实际上是在CentOS服务器上运行的。当我在Linux上构建项目时,它没有将.so输出到与LibGit2Sharp.dll相同的文件夹中。我对MSBuild了解不多,所以我会仔细阅读,稍后可能会接受答案。我现在正在查看您的回购协议,让我看看是否可以重现您的问题!出于测试目的,我将NativeBinaries包中包含的libgit2-ff8d635.so文件上载到64位的服务器,并尝试运行它。仍然抛出DllNotFoundException。尝试过设置LD_LIBRARY_PATH太多启动脚本包括导出LD_LIBRARY_PATH=,但不知道是否正确。查看您的repo,生成时,.so和.dylib文件没有放在正确的位置。它在一个packages文件夹结构中,不应该在那里。我刚刚将.so文件复制到与.exe相同的文件夹中,它对我有效。我正在调查为什么现在会这样。