写在开始

最近在 .NET Core 上折腾起来了git操作, 然后正好发现了一个库可以这么做, 那就是LibGit2Sharp

产生的问题

然而在这上面发现了一个很严重的问题, 那就是在windows上我原本测试都是正常的, 一到了我的生产环境之后他就炸了。 去网上搜索了一圈之后发现好像这个库的native库的linux版不支持Debian10。 然而另一个问题就是我还一个重要的依赖不能在debian9上跑, 这就导致了我可能需要搞定这个库或者放弃使用这个库。

至于错误代码大概就是下面这个样子吧

      System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception.
       ---> System.DllNotFoundException: Unable to load shared library 'git2-106a5f2' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libgit2-106a5f2: cannot open shared object file: No such file or directory

解决的方法

其实还是挺简单的, 重新在Debian10上编译一遍这个库就能解决了, 可以展示一下我用来编译的Dockerfile

FROM mcr.microsoft.com/dotnet/core/runtime:3.1 as builder
RUN apt-get update
RUN apt -y install cmake libcurl4-openssl-dev libssl-dev pkg-config git
RUN apt-get clean

RUN git clone https://github.com/libgit2/libgit2.git /libgit2 && \
    cd /libgit2 && \
    git checkout 106a5f27586504ea371528191f0ea3aac2ad432b

RUN cd /libgit2 && \
    cmake -DCMAKE_BUILD_TYPE:STRING=Release \
      -DBUILD_CLAR:BOOL=OFF \
      -DUSE_SSH=OFF \
      -DENABLE_TRACE=ON \
      -DLIBGIT2_FILENAME=git2-106a5f2 \
      -DCMAKE_OSX_ARCHITECTURES="i386;x86_64" \
      . && \
      cmake --build .

至于上面的FROM的docker镜像应当是只要是Debian10的都可以, 只不过我为了和运行环境基本一致, 所以用了这个镜像。

写在最后

果然ASP.NET Core实际是用的时候还是不如Java啊, 当然也可能是因为对Java不熟, 所以出来的这个言论, 毕竟用到native库的时候都是一样的, 就是好像Java一般不用native库的缘故?

Last modification:February 5th, 2020 at 02:14 pm