Nerdbank.gitversioning: Could not load file or assembly Microsoft.DotNet.PlatformAbstractions under `dotnet tye`

Created on 13 Apr 2020  路  9Comments  路  Source: dotnet/Nerdbank.GitVersioning

I see the following in logs for an azure-pipeline job for a dotnet core 3.1 application. These lines appear in the tye step of this pipeline.

Regardless of this error, the versions still seem to be updated correctly, for both the pipeline, dotnet assembly and node script. As such I post this here for informative purposes only.

2020-04-13T05:26:25.9406642Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: The "Nerdbank.GitVersioning.Tasks.GetBuildVersion" task failed unexpectedly.
2020-04-13T05:26:25.9408785Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: System.TypeInitializationException: The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception.
2020-04-13T05:26:25.9410785Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:  ---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.DotNet.PlatformAbstractions, Version=2.1.0.0, Culture=neutral, PublicKey***=adb9793829ddae60'. The system cannot find the file specified.
2020-04-13T05:26:25.9412046Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: 
2020-04-13T05:26:25.9413899Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: File name: 'Microsoft.DotNet.PlatformAbstractions, Version=2.1.0.0, Culture=neutral, PublicKey***=adb9793829ddae60'
2020-04-13T05:26:25.9415112Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.GetNativeLibraryDirectory()
2020-04-13T05:26:25.9416177Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.LoadUnmanagedDll(String unmanagedDllName)
2020-04-13T05:26:25.9417326Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at System.Runtime.Loader.AssemblyLoadContext.ResolveUnmanagedDll(String unmanagedDllName, IntPtr gchManagedAssemblyLoadContext)
2020-04-13T05:26:25.9418454Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.git_libgit2_init()
2020-04-13T05:26:25.9419623Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.InitializeNativeLibrary()
2020-04-13T05:26:25.9420629Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods..cctor()
2020-04-13T05:26:25.9421673Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: 
2020-04-13T05:26:25.9422629Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018: 
2020-04-13T05:26:25.9423869Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    --- End of inner exception stack trace ---
2020-04-13T05:26:25.9424971Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.git_libgit2_opts(Int32 option, UInt32 level, String path)
2020-04-13T05:26:25.9426094Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.Proxy.git_libgit2_opts_set_search_path(ConfigurationLevel level, String path)
2020-04-13T05:26:25.9427226Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.GlobalSettings.SetConfigSearchPaths(ConfigurationLevel level, String[] paths)
2020-04-13T05:26:25.9428371Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitExtensions.OpenGitRepo(String pathUnderGitRepo, Boolean useDefaultConfigSearchPaths)
2020-04-13T05:26:25.9429732Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.VersionOracle.Create(String projectDirectory, String gitRepoDirectory, ICloudBuild cloudBuild, Nullable`1 overrideBuildNumberOffset, String projectPathRelativeToGitRepoRoot)
2020-04-13T05:26:25.9430984Z /home/vsts/.nuget/packages/nerdbank.gitversioning/3.1.74/build/Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.Tasks.GetBuildVersion.ExecuteInner()
2020-04-13T05:26:25.9431677Z     0 Warning(s)
2020-04-13T05:26:25.9432033Z     1 Error(s)

Most helpful comment

I am working on removing the Microsoft.DotNet.PlatformAbstractions library. Before dotnet/sdk#11076, this library was implicitly loadable from MSBuild running on .NET Core. This was because the assembly was shipping in the dotnet\sdk\<version> directory. After dotnet/sdk#11076, the .NET 5.0 SDK no longer ships PlatformAbstractions with it.

So if your task relies on PlatformAbstractions, you will need to package the assembly with your task assembly (just like any other 3rd party library).

Alternatively, an API to get the current machine's RID was added to .NET 5 with RuntimeInformation.RuntimeIdentifier. However, it is only available on .NET 5, and not previous versions of .NET Core, nor on .NET Framework.

All 9 comments

Thanks for sharing. I'm unfamiliar with Tye, and can only guess that as part of running it, it executes some part of your msbuild projects (again) but in some environment that isn't what we are prepared for.

For this to be actionable, can you provide the OS of the agent, including version?

Is this enough? ubuntu-16.04

I'm afraid when I try on ubuntu 16.04 it works. And you reported it works too, except under dotnet tye, which I'm unfamiliar with. So while I thank you for reporting it, I don't think I'll spend more time on it, at least without more reports.

@AArnott
Get the same exception when try lastest daily builds of net5.0 sdk, and seems Microsoft.DotNet.PlatformAbstractions is already removed and no longer be an part of lastest daily builds of net5.0 sdk.
https://github.com/dotnet/runtime/issues/3470
https://github.com/dotnet/sdk/pull/11076

I am working on removing the Microsoft.DotNet.PlatformAbstractions library. Before dotnet/sdk#11076, this library was implicitly loadable from MSBuild running on .NET Core. This was because the assembly was shipping in the dotnet\sdk\<version> directory. After dotnet/sdk#11076, the .NET 5.0 SDK no longer ships PlatformAbstractions with it.

So if your task relies on PlatformAbstractions, you will need to package the assembly with your task assembly (just like any other 3rd party library).

Alternatively, an API to get the current machine's RID was added to .NET 5 with RuntimeInformation.RuntimeIdentifier. However, it is only available on .NET 5, and not previous versions of .NET Core, nor on .NET Framework.

I just looked where you are using RuntimeEnvironment.GetRuntimeIdentifier() in this project.

https://github.com/dotnet/Nerdbank.GitVersioning/blob/8e21b4bbe596a11c219829751cd28a6aabcec3c1/src/Nerdbank.GitVersioning.Tasks/GitLoaderContext.cs#L61-L65

Another alternative that is available in .NET Core 3.0+ is to use the new System.Runtime.Loader.AssemblyDependencyResolver class. Check out https://docs.microsoft.com/en-us/dotnet/core/tutorials/creating-app-with-plugin-support for more information.

Basically, the idea is that you ship a .deps.json file next to your assembly, along with the runtimes\<RID> folders, and AssemblyDependencyResolver will do the RID fallback for you. This could help you get rid of the RuntimeIdMap code as well.

This just broke me locally on Windows with dotnet build using the 5.0p4 SDK.

C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018: The "Nerdbank.GitVersioning.Tasks.GetBuildVersion" task failed unexpectedly. [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.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. [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:  ---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.DotNet.PlatformAbstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified. [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018: File name: 'Microsoft.DotNet.PlatformAbstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.GetNativeLibraryDirectory() [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitLoaderContext.LoadUnmanagedDll(String unmanagedDllName) [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.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) [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.git_libgit2_init() [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods.InitializeNativeLibrary() [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.Core.NativeMethods..cctor() [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    --- End of inner exception stack trace --- [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.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) [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.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) [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at LibGit2Sharp.GlobalSettings.SetConfigSearchPaths(ConfigurationLevel level, String[] paths) [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.GitExtensions.OpenGitRepo(String pathUnderGitRepo, Boolean useDefaultConfigSearchPaths) [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.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) [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
C:\Users\Claire\.nuget\packages\nerdbank.gitversioning\3.1.91\build\Nerdbank.GitVersioning.targets(71,5): error MSB4018:    at Nerdbank.GitVersioning.Tasks.GetBuildVersion.ExecuteInner() [D:\dev\NuGetPackageExplorer\Types\Types.csproj]
    0 Warning(s)
    1 Error(s)

Done, that fixed it for me

Was this page helpful?
0 / 5 - 0 ratings