写在开始
最近在 .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库的缘故?