dotnet / sdk

Core functionality needed to create .NET Core projects, that is shared between Visual Studio and CLI
https://dot.net/core
MIT License
2.7k stars 1.06k forks source link

Workload-related exceptions thrown by `dotnet` when .NET Preview 5 is installed side-by-side with Preview 4 #18350

Closed pkanavos closed 3 years ago

pkanavos commented 3 years ago

After installing .NET 6 Preview 5, executing dotnet new or dotnet workload list on a machine that had Preview 4 installed throws:

❯ dotnet new
An item with the same key has already been added. Key: microsoft-macos-sdk-full
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) in System.Private.CoreLib.dll:token 0x60062cb+0x1a0
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) in System.Private.CoreLib.dll:token 0x60062be+0x0
   at Microsoft.NET.Sdk.WorkloadManifestReader.WorkloadResolver.RefreshWorkloadManifests() in Microsoft.DotNet.TemplateLocator.dll:token 0x6000065+0x1b2
   at Microsoft.NET.Sdk.WorkloadManifestReader.WorkloadResolver..ctor(IWorkloadManifestProvider manifestProvider, String[] dotnetRootPaths, String[] currentRuntimeIdentifiers) in Microsoft.DotNet.TemplateLocator.dll:token 0x6000064+0x31
   at Microsoft.NET.Sdk.WorkloadManifestReader.WorkloadResolver.Create(IWorkloadManifestProvider manifestProvider, String dotnetRootPath, String sdkVersion) in Microsoft.DotNet.TemplateLocator.dll:token 0x6000062+0x8a
   at Microsoft.DotNet.TemplateLocator.TemplateLocator.GetDotnetSdkTemplatePackages(String sdkVersion, String dotnetRootPath) in Microsoft.DotNet.TemplateLocator.dll:token 0x600008f+0x4d

The /usr/local/share/dotnet/sdk-manifests/6.0.100 folder seems to have manifests for the same workloads with different names, eg an old Microsoft.NET.Workload.MacCatalyst and a newer microsoft.net.sdk.maccatalyst, with a workload id `"microsoft-maccatalyst-sdk-full":

{
    "version": "14.5.100-preview.5.881",
    "workloads": {
        "microsoft-maccatalyst-sdk-full": {
            "description": "Microsoft MacCatalyst SDK",
            "packs": [
                "Microsoft.MacCatalyst.Sdk",
                "Microsoft.MacCatalyst.Ref",
                "Microsoft.MacCatalyst.Templates"
            ]
        }
    },

Removing Preview 4 using the script in Uninstall .NET doesn't help.

Possible workaround

Manually removing all Microsoft.NET.Workload.* folders allows dotnet new and dotnet workload list to run, but the latter’s result is an empty list.

❯ dotnet workload list
Workload Id
-----------

The contents of the manifest folder after cleanup are :

❯ ls -l
total 0
drwxr-xr-x  4 root  wheel  128 Jun  3 02:16 microsoft.net.sdk.android
drwxr-xr-x  4 root  wheel  128 Jun  3 02:16 microsoft.net.sdk.ios
drwxr-xr-x  4 root  wheel  128 Jun  3 02:16 microsoft.net.sdk.maccatalyst
drwxr-xr-x  4 root  wheel  128 Jun  3 02:16 microsoft.net.sdk.macos
drwxr-xr-x  4 root  wheel  128 Jun  3 02:16 microsoft.net.sdk.tvos
drwxr-xr-x  4 root  wheel  128 Jun  3 02:16 microsoft.net.workload.mono.toolchain

Creating a new project, eg a Blazor Wasm project, works even though the Microsoft.NET.Workload.BlazorWebAssembly folder was deleted:

❯ dotnet new blazorwasm
The template "Blazor WebAssembly App" was created successfully.
This template contains technologies from parties other than Microsoft, see https://aka.ms/aspnetcore/6.0-third-party-notices for details.

Processing post-creation actions...
Running 'dotnet restore' on /Users/panagiotiskanavos/projects/Spikes/console5/console5.csproj...
  Determining projects to restore...
  Restored /Users/panagiotiskanavos/projects/Spikes/console5/console5.csproj (in 9.11 sec).
Restore succeeded.

dotnet info

dotnet --info returns :

❯ dotnet --info
.NET SDK (reflecting any global.json):
 Version:   6.0.100-preview.5.21302.13
 Commit:    d6380bcae7

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  11.4
 OS Platform: Darwin
 RID:         osx.11.0-x64
 Base Path:   /usr/local/share/dotnet/sdk/6.0.100-preview.5.21302.13/

Host (useful for support):
  Version: 6.0.0-preview.5.21301.5
  Commit:  ec3e0b276b

.NET SDKs installed:
  2.1.500 [/usr/local/share/dotnet/sdk]
  2.1.811 [/usr/local/share/dotnet/sdk]
  2.2.100 [/usr/local/share/dotnet/sdk]
  3.0.100 [/usr/local/share/dotnet/sdk]
  3.1.102 [/usr/local/share/dotnet/sdk]
  3.1.201 [/usr/local/share/dotnet/sdk]
  3.1.300 [/usr/local/share/dotnet/sdk]
  3.1.406 [/usr/local/share/dotnet/sdk]
  3.1.408 [/usr/local/share/dotnet/sdk]
  3.1.409 [/usr/local/share/dotnet/sdk]
  3.1.410 [/usr/local/share/dotnet/sdk]
  5.0.100 [/usr/local/share/dotnet/sdk]
  5.0.101 [/usr/local/share/dotnet/sdk]
  5.0.102 [/usr/local/share/dotnet/sdk]
  5.0.103 [/usr/local/share/dotnet/sdk]
  5.0.202 [/usr/local/share/dotnet/sdk]
  5.0.203 [/usr/local/share/dotnet/sdk]
  5.0.301 [/usr/local/share/dotnet/sdk]
  6.0.100-preview.5.21302.13 [/usr/local/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.All 2.1.23 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.23 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.12 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.14 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.15 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.16 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.3 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.5 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.7 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.0-preview.5.21301.17 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.23 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.12 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.14 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.15 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.16 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.3 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.6 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.7 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.0-preview.5.21301.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
dotnet-issue-labeler[bot] commented 3 years ago

I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label.

dsplaisted commented 3 years ago

Yes, we renamed the workload manifests which causes issues when you have both installed. This is covered in the known issues here: https://github.com/dotnet/core/blob/main/release-notes/6.0/known-issues.md#preview-5

pkanavos commented 3 years ago

@dsplaisted this probably needs a stronger warning then - probably in the blg posts themselves. This breaks dotnet right from the start for people that had Preview 4 installed in a completely unexpected way, even if they never used workloads.

Kind of like Eddie Murphy in Best Defence:

"The WAM's overheating! The WAM's overheating! What the hell is a WAM!?!"

marcpopMSFT commented 3 years ago

We've now released workarounds for this in all VS and recent previews so this specific issue should no longer be a blocker.