Clean up tool restore framework fallback logic so there aren't multiple call sites to GetToolLockFile

This commit is contained in:
Daniel Plaisted 2017-05-05 14:23:33 -07:00
parent 8b13b3e579
commit 10dd67baa8

View file

@ -134,40 +134,39 @@ namespace Microsoft.DotNet.Cli.Utils
ProjectToolsCommandResolverName, ProjectToolsCommandResolverName,
string.Join(Environment.NewLine, possiblePackageRoots.Select((p) => $"- {p}")))); string.Join(Environment.NewLine, possiblePackageRoots.Select((p) => $"- {p}"))));
var toolPackageFramework = project.DotnetCliToolTargetFramework; List<NuGetFramework> toolFrameworksToCheck = new List<NuGetFramework>();
toolFrameworksToCheck.Add(project.DotnetCliToolTargetFramework);
var toolLockFile = GetToolLockFile(
toolLibraryRange,
toolPackageFramework,
possiblePackageRoots);
// NuGet restore in Visual Studio may restore for netcoreapp1.0. So if that happens, fall back to // NuGet restore in Visual Studio may restore for netcoreapp1.0. So if that happens, fall back to
// looking for a netcoreapp1.0 or netcoreapp1.1 tool restore. // looking for a netcoreapp1.0 or netcoreapp1.1 tool restore.
if (project.DotnetCliToolTargetFramework.Framework == FrameworkConstants.FrameworkIdentifiers.NetCoreApp &&
project.DotnetCliToolTargetFramework.Version >= new Version(2, 0, 0))
{
toolFrameworksToCheck.Add(NuGetFramework.Parse("netcoreapp1.1"));
toolFrameworksToCheck.Add(NuGetFramework.Parse("netcoreapp1.0"));
}
LockFile toolLockFile = null;
NuGetFramework toolTargetFramework = null; ;
foreach (var toolFramework in toolFrameworksToCheck)
{
toolLockFile = GetToolLockFile(
toolLibraryRange,
toolFramework,
possiblePackageRoots);
if (toolLockFile != null)
{
toolTargetFramework = toolFramework;
break;
}
}
if (toolLockFile == null) if (toolLockFile == null)
{ {
if (toolPackageFramework.Framework == FrameworkConstants.FrameworkIdentifiers.NetCoreApp && return null;
toolPackageFramework.Version >= new Version(2, 0, 0))
{
foreach (var fallbackFramework in new [] { "netcoreapp1.1", "netcoreapp1.0"})
{
toolPackageFramework = NuGetFramework.Parse(fallbackFramework);
toolLockFile = GetToolLockFile(
toolLibraryRange,
toolPackageFramework,
possiblePackageRoots);
if (toolLockFile != null)
{
break;
}
}
}
if (toolLockFile == null)
{
return null;
}
} }
Reporter.Verbose.WriteLine(string.Format( Reporter.Verbose.WriteLine(string.Format(
@ -176,7 +175,7 @@ namespace Microsoft.DotNet.Cli.Utils
toolLockFile.Path)); toolLockFile.Path));
var toolLibrary = toolLockFile.Targets var toolLibrary = toolLockFile.Targets
.FirstOrDefault(t => toolPackageFramework == t.TargetFramework) .FirstOrDefault(t => toolTargetFramework == t.TargetFramework)
?.Libraries.FirstOrDefault( ?.Libraries.FirstOrDefault(
l => StringComparer.OrdinalIgnoreCase.Equals(l.Name, toolLibraryRange.Name)); l => StringComparer.OrdinalIgnoreCase.Equals(l.Name, toolLibraryRange.Name));
if (toolLibrary == null) if (toolLibrary == null)
@ -192,7 +191,7 @@ namespace Microsoft.DotNet.Cli.Utils
var depsFilePath = GetToolDepsFilePath( var depsFilePath = GetToolDepsFilePath(
toolLibraryRange, toolLibraryRange,
toolPackageFramework, toolTargetFramework,
toolLockFile, toolLockFile,
depsFileRoot, depsFileRoot,
project.ToolDepsJsonGeneratorProject); project.ToolDepsJsonGeneratorProject);