public void FindMSBuildSDKsPath(string dotNetCorePath) { if (string.IsNullOrEmpty(dotNetCorePath)) { return; } string rootDirectory = Path.GetDirectoryName(dotNetCorePath); sdkRootPath = Path.Combine(rootDirectory, "sdk"); if (!Directory.Exists(sdkRootPath)) { return; } SdkVersions = GetInstalledSdkVersions(sdkRootPath) .OrderByDescending(version => version) .ToArray(); if (!SdkVersions.Any()) { return; } DotNetCoreVersion latestVersion = SdkVersions.FirstOrDefault(); SdksParentDirectory = Path.Combine(sdkRootPath, latestVersion.OriginalString); if (SdksParentDirectory == null) { return; } msbuildSDKsPath = Path.Combine(SdksParentDirectory, "Sdks"); Exist = true; }
public void FindMSBuildSDKsPath() { var dotNetCorePath = new DotNetCorePath(); if (dotNetCorePath.IsMissing) { return; } string rootDirectory = Path.GetDirectoryName(dotNetCorePath.FileName); string sdkRootPath = Path.Combine(rootDirectory, "sdk"); if (!Directory.Exists(sdkRootPath)) { return; } SdkVersions = GetInstalledSdkVersions(sdkRootPath) .OrderByDescending(version => version) .ToArray(); if (!SdkVersions.Any()) { return; } DotNetCoreVersion latestVersion = SdkVersions.FirstOrDefault(); SdksParentDirectory = Path.Combine(sdkRootPath, latestVersion.OriginalString); if (SdksParentDirectory == null) { return; } msbuildSDKsPath = Path.Combine(SdksParentDirectory, "Sdks"); MSBuildProjectService.RegisterProjectImportSearchPath("MSBuildSDKsPath", MSBuildSDKsPath); }
//https://docs.microsoft.com/en-us/dotnet/core/tools/global-json public void ResolveSDK(string workingDir = "", bool forceLookUpGlobalJson = false) { if (!SdkVersions.Any()) { return; } DotNetCoreVersion targetVersion = null; if (forceLookUpGlobalJson) { GlobalJsonPath = LookUpGlobalJson(workingDir); } var specificVersion = ReadGlobalJson(); //if !global.json, returns latest if (string.IsNullOrEmpty(specificVersion)) { msbuildSDKsPath = GetSdksParentDirectory(GetLatestSdk()); Exist = true; return; } DotNetCoreVersion requiredVersion; DotNetCoreVersion.TryParse(specificVersion, out requiredVersion); if (requiredVersion == null) { msbuildSDKsPath = string.Empty; IsUnsupportedSdkVersion = true; Exist = false; return; } //if global.json exists and matches returns it targetVersion = SdkVersions.FirstOrDefault(x => x.OriginalString.IndexOf(specificVersion, StringComparison.InvariantCulture) == 0); if (targetVersion == null) { //if global.json exists and !matches then: if (requiredVersion >= DotNetCoreVersion.Parse("2.1")) { targetVersion = SdkVersions.Where(version => version.Major == requiredVersion.Major && version.Minor == requiredVersion.Minor) .OrderByDescending(version => version.Patch).FirstOrDefault(x => { return((x.Patch / 100 == requiredVersion.Patch / 100) && (x.Patch % 100 >= requiredVersion.Patch % 100)); }); } else { targetVersion = SdkVersions.Where(version => version.Major == requiredVersion.Major && version.Minor == requiredVersion.Minor) .OrderByDescending(version => version.Patch).FirstOrDefault(); } if (targetVersion == null) { msbuildSDKsPath = string.Empty; IsUnsupportedSdkVersion = true; Exist = false; return; } } msbuildSDKsPath = GetSdksParentDirectory(targetVersion); Exist = true; IsUnsupportedSdkVersion = false; }