diff --git a/src/Microsoft.Tye.Core/ProjectReader.cs b/src/Microsoft.Tye.Core/ProjectReader.cs index 39e3c780..553964bf 100644 --- a/src/Microsoft.Tye.Core/ProjectReader.cs +++ b/src/Microsoft.Tye.Core/ProjectReader.cs @@ -90,27 +90,33 @@ namespace Microsoft.Tye { output?.WriteDebugLine("Locating .NET SDK..."); - // It says VisualStudio - but we'll just use .NET SDK - var instances = MSBuildLocator.QueryVisualStudioInstances(new VisualStudioInstanceQueryOptions() + // It says VisualStudio - but on .NET Core, it defaults to just DotNetSdk. + // https://github.com/microsoft/MSBuildLocator/blob/v1.2.6/src/MSBuildLocator/VisualStudioInstanceQueryOptions.cs#L23 + // + // Resolve the SDK from the project directory and fall back to the global SDK. + // We're making the assumption that all of the projects want to use the same + // SDK version. This library is going load a single version of the SDK's + // assemblies into our process, so we can't use support SDKs at once without + // getting really tricky. + // + // The .NET SDK-based discovery uses `dotnet --info` and returns the SDK + // in use for the directory. + // + // https://github.com/microsoft/MSBuildLocator/blob/v1.2.6/src/MSBuildLocator/DotNetSdkLocationHelper.cs#L68 + var instance = MSBuildLocator + .QueryVisualStudioInstances(new VisualStudioInstanceQueryOptions { WorkingDirectory = projectFile.DirectoryName }) + .FirstOrDefault(); + + if (instance == null) { - DiscoveryTypes = DiscoveryType.DotNetSdk, - - // Using the project as the working directory. We're making the assumption that - // all of the projects want to use the same SDK version. This library is going - // load a single version of the SDK's assemblies into our process, so we can't - // use support SDKs at once without getting really tricky. - // - // The .NET SDK-based discovery uses `dotnet --info` and returns the SDK - // in use for the directory. - // - // https://github.com/microsoft/MSBuildLocator/blob/master/src/MSBuildLocator/MSBuildLocator.cs#L320 - WorkingDirectory = projectFile.DirectoryName, - }); - - var instance = instances.SingleOrDefault(); + instance = MSBuildLocator + .QueryVisualStudioInstances() + .FirstOrDefault(); + } + if (instance == null) { - throw new CommandException("Failed to find dotnet. Make sure the .NET SDK is installed and on the PATH."); + throw new CommandException($"Failed to resolve dotnet in {projectFile.Directory} or the PATH. Make sure the .NET SDK is installed and is on the PATH."); } output?.WriteDebugLine("Found .NET SDK at: " + instance.MSBuildPath);