Nerdbank.gitversioning: Not able to load native library..?

Created on 25 Jan 2020  路  12Comments  路  Source: dotnet/Nerdbank.GitVersioning

I'm trying to build Bolero, but I'm getting errors pointing at this library. I see several other issues related to loading the unmanaged library, but I'm not sure if this is the same issue.

/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: The "Nerdbank.GitVersioning.Tasks.GetBuildVersion" task failed unexpectedly. [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception. [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:  ---> System.PlatformNotSupportedException: manjaro-x64 [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.RuntimeIdMap.GetNativeLibraryDirectoryName(String runtimeIdentifier) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.GetNativeLibraryDirectory() [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.LoadUnmanagedDll(String unmanagedDllName) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at System.Runtime.Loader.AssemblyLoadContext.ResolveUnmanagedDll(String unmanagedDllName, IntPtr gchManagedAssemblyLoadContext) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.git_libgit2_init() [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.InitializeNativeLibrary() [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods..cctor() [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    --- End of inner exception stack trace --- [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.git_libgit2_opts(Int32 option, UInt32 level, String path) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.Proxy.git_libgit2_opts_set_search_path(ConfigurationLevel level, String path) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.GlobalSettings.SetConfigSearchPaths(ConfigurationLevel level, String[] paths) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitExtensions.OpenGitRepo(String pathUnderGitRepo, Boolean useDefaultConfigSearchPaths) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.VersionOracle.Create(String projectDirectory, String gitRepoDirectory, ICloudBuild cloudBuild, Nullable`1 overrideBuildNumberOffset, String projectPathRelativeToGitRepoRoot) [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]
/home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.Tasks.GetBuildVersion.ExecuteInner() [/home/simendsjo/code/Bolero/src/Bolero.Build/Bolero.Build.csproj]

But as I have plenty of libraries lying around, locating a useful one shouldn't be too hard, so maybe I'm on the wrong track.

  • /usr/lib/libgit2.so
  • /home/simendsjo/.nuget/packages/libgit2sharp.nativebinaries/2.0.298/runtimes/linux-x64/native/libgit2-ef5a385.so
  • /home/simendsjo/.nuget/packages/nbgv/3.0.26/tools/netcoreapp2.1/any/runtimes/linux-x64/native/libgit2-572e4d8.so
  • /home/simendsjo/.nuget/packages/nerdbank.gitversioning/3.0.50/build/runtimes/linux-x64/native/libgit2-572e4d8.so
  • /home/simendsjo/.nuget/packages/nerdbank.gitversioning.lkg/1.6.20-beta-gfea83a8c9e/build/lib/linux/x86_64/libgit2-1196807.so
  • /home/simendsjo/.dotnet/tools/.store/nbgv/3.0.50/nbgv/3.0.50/tools/netcoreapp2.1/any/runtimes/linux-x64/native/libgit2-572e4d8.so
enhancement libgit2

Most helpful comment

Thanks. Since libgit2 is a native dependency, which depends on libssl which seems to be different for every version of every distro, each version requires work to support. libgit2sharp folks are working on it. The solution (I hope) that's coming is that we're removing the libssl dependency completely so that it's much more distro independent.

All 12 comments

Which linux distro are you on?

Which linux distro are you on?

Manjaro, an Arch derivative.

Thanks. Since libgit2 is a native dependency, which depends on libssl which seems to be different for every version of every distro, each version requires work to support. libgit2sharp folks are working on it. The solution (I hope) that's coming is that we're removing the libssl dependency completely so that it's much more distro independent.

I just ran into this on amazon linux 2.

@jsteinich What version of NB.GV are you using?
Is .NET Core supported on "Amazon Linux 2"? I've never heard of it.

I'm using 3.0.48.
Yeah, .Net Core works just fine. It is very similar to RHEL and Cent OS.
I just switched to running in an Ubuntu container, so not a big deal for me.

Can you upgrade from 3.0.48 to 3.1.74? We've made fixes in this area recently.

Getting the same error on 3.1.74

I just noticed this exception in your initial report:

System.PlatformNotSupportedException: manjaro-x64

So I guess we're not even hitting a native image load failure (yet). We simply don't recognize your linux distro from our supported list.

If you want to submit a PR that adds support for it that you've tested, I'll accept that. Otherwise I think we'll have to Won't Fix this, at least till we get the libgit2sharp update that removes the distro-fragile dependency on libssl.

Basically the same issue on arch:

Unhandled exception. System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception.
 ---> System.PlatformNotSupportedException: arch-x64
   at Nerdbank.GitVersioning.RuntimeIdMap.GetNativeLibraryDirectoryName(String runtimeIdentifier) in D:\a\1\s\src\Nerdbank.GitVersioning.Tasks\RuntimeIdMap.cs:line 73
   at Nerdbank.GitVersioning.GitLoaderContext.GetNativeLibraryDirectory() in D:\a\1\s\src\Nerdbank.GitVersioning.Tasks\GitLoaderContext.cs:line 63
   at Nerdbank.GitVersioning.GitLoaderContext.LoadUnmanagedDll(String unmanagedDllName) in D:\a\1\s\src\Nerdbank.GitVersioning.Tasks\GitLoaderContext.cs:line 41
   at System.Runtime.Loader.AssemblyLoadContext.ResolveUnmanagedDll(String unmanagedDllName, IntPtr gchManagedAssemblyLoadContext)
   at LibGit2Sharp.Core.NativeMethods.git_libgit2_init()
   at LibGit2Sharp.Core.NativeMethods.InitializeNativeLibrary()
   at LibGit2Sharp.Core.NativeMethods..cctor()
   --- End of inner exception stack trace ---
   at LibGit2Sharp.Core.NativeMethods.git_libgit2_opts(Int32 option, UInt32 level, String path)
   at LibGit2Sharp.Core.Proxy.git_libgit2_opts_set_search_path(ConfigurationLevel level, String path)
   at LibGit2Sharp.GlobalSettings.SetConfigSearchPaths(ConfigurationLevel level, String[] paths)
   at Nerdbank.GitVersioning.GitExtensions.OpenGitRepo(String pathUnderGitRepo, Boolean useDefaultConfigSearchPaths)
   at Nerdbank.GitVersioning.Tool.Program.OnGetVersionCommand(String projectPath, String format, String singleVariable, String versionOrRef) in D:\a\1\s\src\nbgv\Program.cs:line 285
   at Nerdbank.GitVersioning.Tool.Program.MainInner(String[] args) in D:\a\1\s\src\nbgv\Program.cs:line 150
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at Nerdbank.GitVersioning.Tool.Program.Main(String[] args) in D:\a\1\s\src\nbgv\Program.cs:line 64

@AArnott - is there an issue tracking libgit2sharp removing the libssl dependency somewhere? I did a quick search of their issues and didn't see an obvious one. It also looks like development on that project has slowed.

What is involved in getting a new platform added/supported? I would love to use nbgv on redhat ubi docker images (eg https://catalog.redhat.com/software/containers/detail/5de595fa5a13461646f8bbb0).

@cdunford the libgit2sharp work item is https://github.com/libgit2/libgit2sharp/pull/1618

To get nbgv working on a new linux distro, the first (and main) step is to get libgit2sharp to work on that distro. Once that's done, NB.GV will often "just work" but may sometimes require a line or two change to our linux distro table and/or a libgit2sharp version update.

Was this page helpful?
0 / 5 - 0 ratings