Nerdbank.GitVersioning: Pop!_OS 20.04 not supported

I haven’t tried it with straight Ubuntu 20.04 yet; this is a newly paved machine with Pop!_OS 20.04.

/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: The "Nerdbank.GitVersioning.Tasks.GetBuildVersion" task failed unexpectedly. [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception. [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:  ---> System.PlatformNotSupportedException: pop.20.04-x64 [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.RuntimeIdMap.GetNativeLibraryDirectoryName(String runtimeIdentifier) [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.GetNativeLibraryDirectory() [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.LoadUnmanagedDll(String unmanagedDllName) [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at System.Runtime.Loader.AssemblyLoadContext.ResolveUnmanagedDll(String unmanagedDllName, IntPtr gchManagedAssemblyLoadContext) [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.git_libgit2_init() [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.InitializeNativeLibrary() [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods..cctor() [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    --- End of inner exception stack trace --- [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.git_libgit2_opts(Int32 option, UInt32 level, String path) [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.Proxy.git_libgit2_opts_set_search_path(ConfigurationLevel level, String path) [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.GlobalSettings.SetConfigSearchPaths(ConfigurationLevel level, String[] paths) [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitExtensions.OpenGitRepo(String pathUnderGitRepo, Boolean useDefaultConfigSearchPaths) [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/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/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]
/home/bradwilson/.nuget/packages/nerdbank.gitversioning/3.1.91/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.Tasks.GetBuildVersion.ExecuteInner() [/home/bradwilson/dev/xunit/xunit/src/xunit.v3.assert/xunit.v3.assert.csproj]

Note that unlike the recent 18.04 issue, this is not related to Omnisharp; this fails with dotnet build as well.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 38 (3 by maintainers)

Most upvoted comments

@bording, is there any way to improve libgit2sharp’s ability to load native dll’s on mono so that it varies by RID?

I’m not sure that there is. Mono doesn’t understand RIDs at all, just the dll.config mechanism, and that is very limited in what it can support.

Linux also doesn’t let you alter the load path after a process is started, so there’s no way I know of to influence where mono is looking when it finds DllImport attributes,

The only way I’m currently aware of to “fix” this is for the managed implementation work to get done, which should mean we only have a single native binary to point to per architecture, so I think the dll.config can work.

Though, it’s sill likely to be an issue for Alpine since it doesn’t use libc.

I can repro the omnisharp failure. Thinking more about this, maybe it has nothing to do with RIDs, and everything to do with the libgit2sharp.dll.config file. Mono uses this file (which .NET and .NET Core ignore) to find native dependencies, so there’s no RID map. It can only point to just the one dll, at the path specified in that file.

I just tested this theory. I changed LibGit2Sharp.dll.config on the Pop!_OS machine’s nuget package cache so that the target= attribute is set to ../runtimes/ubuntu.18.04-x64/native/libgit2-106a5f2.so and omnisharp suddenly started working.

@bording, is there any way to improve libgit2sharp’s ability to load native dll’s on mono so that it varies by RID?

Verified that 3.2.17-beta-gceb8927950 does fix the problem. Thanks for the quick turnaround!

Sure, I’ll give it a try later today. What’s the server URL?