使用 LibGit2Sharp 构建项目,在 .NET 和 Mono 上 运行 (Windows, Linux, Mac)
Build project using LibGit2Sharp, have it run on .NET & Mono (Windows, Linux, Mac)
使用 LibGit2Sharp 0.22.0-pre20150606092322
(与 NuGet),当我在 Windows 上构建我的项目时,NativeBinaries 文件夹仅包含 .dll 文件,我认为这些文件不适用于 Linux (除非它们是 .NET 库)。尝试 运行 Linux 上的项目导致异常:
System.TypeInitializationException: An exception was thrown by the type initializer for 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 (dylib),一个文件支持两种架构
- 64 位 Linux(所以)
如果您尝试在 32 位 linux 上 运行,则没有为此包含的预构建库。 distro/architecture你是什么运行宁?
当您安装 LibGit2Sharp 包时,一个 MSBuild 属性文件会添加到您的项目中,它负责在构建过程中将本机二进制文件复制到正确的位置。
如果您是在 linux 上构建,那么构建输出应该包含 libgit2-ff8d635.so 在与 LibGit2Sharp.dll.
相同的目录中
只要您的项目不执行需要影子复制程序集的操作,就足以让 mono 找到并加载 linux 库。
如果你是,例如,如果它是一个 asp.net 项目,那么你必须确保本机 linux 库加载器可以找到 .so 文件,或者通过设置 LD_LIBRARY_PATH,或实际安装它。
就一次构建而言,由于所有预构建本机映像都已位于 NativeBinaries 包中,您的发布过程可以直接从那里包含它们。
使用 LibGit2Sharp 0.22.0-pre20150606092322
(与 NuGet),当我在 Windows 上构建我的项目时,NativeBinaries 文件夹仅包含 .dll 文件,我认为这些文件不适用于 Linux (除非它们是 .NET 库)。尝试 运行 Linux 上的项目导致异常:
System.TypeInitializationException: An exception was thrown by the type initializer for 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 (dylib),一个文件支持两种架构
- 64 位 Linux(所以)
如果您尝试在 32 位 linux 上 运行,则没有为此包含的预构建库。 distro/architecture你是什么运行宁?
当您安装 LibGit2Sharp 包时,一个 MSBuild 属性文件会添加到您的项目中,它负责在构建过程中将本机二进制文件复制到正确的位置。
如果您是在 linux 上构建,那么构建输出应该包含 libgit2-ff8d635.so 在与 LibGit2Sharp.dll.
相同的目录中只要您的项目不执行需要影子复制程序集的操作,就足以让 mono 找到并加载 linux 库。
如果你是,例如,如果它是一个 asp.net 项目,那么你必须确保本机 linux 库加载器可以找到 .so 文件,或者通过设置 LD_LIBRARY_PATH,或实际安装它。
就一次构建而言,由于所有预构建本机映像都已位于 NativeBinaries 包中,您的发布过程可以直接从那里包含它们。