Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
My home box has both the 7.0.400 and 8.0.100 RC2 .NET SDKs installed. This ended up revealing a subtle bug in the CLI when executing `dotnet test`. The test content in this repo generates a global.json that pins the SDK to 7.0.400. That is done for consistency in testing across developer machines and CI. The repository itself has no global.json file so it floats to the _latest_ .NET SDK. This combination revealed an odd bug in MSBuild. When executing `dotnet test` the CLI ended up spawning a `dotnet` that sets the `%MSBuildSDKsPath%` environment variable. Because `dotnet` spawned as an 8.0 process it set that path to the 8.0 SDK. When executing the `dotnet new` actions inside the tests the global.json was read by the runtime host and ended up spawning a `dotnet` process from the 7.0 runtime. But msbuild ended up loading tasks / targets from 8.0 SDK due to the `%MSBuildSDKsPath%` value. Those targeted `net8.0` and hence failed to load in the 7.0 runtime. ``` The template "Console App" was created successfully. Processing post-creation actions... Restoring C:\Users\jaredpar\AppData\Local\Temp\CompilerLogFixture\be3521749f1e49c8bb93b2212110c4a8\scratch dir\0aa90c51a9794319bb0d1370e52350dc\example-no-generator.csproj: Determining projects to restore... C:\Program Files\dotnet\sdk\8.0.100-rc.2.23502.2\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.Shared.targets(152,5): error MSB4062: The "CheckForImplicitPackageReferenceOverrides" task could not be loaded from the assembly C:\Program Files\dotnet\sdk\8.0.100-rc.2.23502.2\Sdks\Microsoft.NET.Sdk\targets\..\tools\net8.0\Microsoft.NET.Build.Tasks.dll. Could not load file or assembly 'System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask. [C:\Users\jaredpar\AppData\Local\Temp\CompilerLogFixture\be3521749f1e49c8bb93b2212110c4a8\scratch dir\0aa90c51a9794319bb0d1370e52350dc\example-no-generator.csproj] ``` Thanks to @rainersigwald and @baronfel for tracking this down! dotnet/msbuild#9411 variable
- Loading branch information