Fix package code for new NuGet.
The new NuGet uses tolower paths, and we need to react to it. Port https://github.com/dotnet/cli/pull/2722 Port https://github.com/dotnet/cli/pull/3554
This commit is contained in:
parent
d54bba96cd
commit
a48def9ade
19 changed files with 150 additions and 73 deletions
|
@ -57,5 +57,9 @@
|
||||||
"ClassLibrary2",
|
"ClassLibrary2",
|
||||||
"ClassLibrary3"
|
"ClassLibrary3"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"packageFolders": {
|
||||||
|
"/foo/packages": {},
|
||||||
|
"/foo/packages2": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -55,7 +55,7 @@ namespace Microsoft.DotNet.Cli.Utils
|
||||||
|
|
||||||
return Path.Combine(
|
return Path.Combine(
|
||||||
GetBaseToolPath(packageId),
|
GetBaseToolPath(packageId),
|
||||||
version.ToNormalizedString(),
|
version.ToNormalizedString().ToLowerInvariant(),
|
||||||
framework.GetShortFolderName(),
|
framework.GetShortFolderName(),
|
||||||
"project.lock.json");
|
"project.lock.json");
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ namespace Microsoft.DotNet.Cli.Utils
|
||||||
return Path.Combine(
|
return Path.Combine(
|
||||||
_packagesDirectory,
|
_packagesDirectory,
|
||||||
".tools",
|
".tools",
|
||||||
packageId);
|
packageId.ToLowerInvariant());
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<NuGetVersion> GetAvailableToolVersions(string packageId)
|
private IEnumerable<NuGetVersion> GetAvailableToolVersions(string packageId)
|
||||||
|
|
|
@ -67,7 +67,7 @@ namespace Microsoft.DotNet.Cli.Compiler.Common
|
||||||
.Any();
|
.Any();
|
||||||
|
|
||||||
// coreclr should be present for standalone apps
|
// coreclr should be present for standalone apps
|
||||||
if (! isCoreClrPresent)
|
if (!isCoreClrPresent)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Expected coreclr library not found in package graph. Please try running dotnet restore again.");
|
throw new InvalidOperationException("Expected coreclr library not found in package graph. Please try running dotnet restore again.");
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ namespace Microsoft.DotNet.Cli.Compiler.Common
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MakeCompilationOutputRunnableForCoreCLR(bool skipRuntimeConfig)
|
private void MakeCompilationOutputRunnableForCoreCLR(bool skipRuntimeConfig)
|
||||||
{
|
{
|
||||||
WriteDepsFileAndCopyProjectDependencies(_exporter, skipRuntimeConfig);
|
WriteDepsFileAndCopyProjectDependencies(_exporter, skipRuntimeConfig);
|
||||||
|
|
||||||
var isRunnable = _compilerOptions.EmitEntryPoint ?? _context.ProjectFile.OverrideIsRunnable;
|
var isRunnable = _compilerOptions.EmitEntryPoint ?? _context.ProjectFile.OverrideIsRunnable;
|
||||||
|
@ -276,8 +276,16 @@ namespace Microsoft.DotNet.Cli.Compiler.Common
|
||||||
|
|
||||||
private void AddAdditionalProbingPaths(JObject runtimeOptions)
|
private void AddAdditionalProbingPaths(JObject runtimeOptions)
|
||||||
{
|
{
|
||||||
var additionalProbingPaths = new JArray(_context.PackagesDirectory);
|
if (_context.LockFile != null)
|
||||||
runtimeOptions.Add("additionalProbingPaths", additionalProbingPaths);
|
{
|
||||||
|
var additionalProbingPaths = new JArray();
|
||||||
|
foreach (var packageFolder in _context.LockFile.PackageFolders)
|
||||||
|
{
|
||||||
|
additionalProbingPaths.Add(packageFolder.Path);
|
||||||
|
}
|
||||||
|
|
||||||
|
runtimeOptions.Add("additionalProbingPaths", additionalProbingPaths);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteDeps(IEnumerable<LibraryExport> runtimeExports, IEnumerable<LibraryExport> compilationExports)
|
public void WriteDeps(IEnumerable<LibraryExport> runtimeExports, IEnumerable<LibraryExport> compilationExports)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
using Microsoft.Extensions.EnvironmentAbstractions;
|
using Microsoft.Extensions.EnvironmentAbstractions;
|
||||||
using Microsoft.DotNet.ProjectModel.Resolution;
|
using NuGet.Configuration;
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Configurer
|
namespace Microsoft.DotNet.Configurer
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,7 @@ namespace Microsoft.DotNet.Configurer
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_nugetCachePath))
|
if (string.IsNullOrEmpty(_nugetCachePath))
|
||||||
{
|
{
|
||||||
_nugetCachePath = PackageDependencyProvider.ResolvePackagesPath(null, null);
|
_nugetCachePath = NuGetPathContext.Create(new NullSettings()).UserPackageFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _nugetCachePath;
|
return _nugetCachePath;
|
||||||
|
|
|
@ -20,6 +20,7 @@ namespace Microsoft.DotNet.ProjectModel.Graph
|
||||||
public IList<LockFileProjectLibrary> ProjectLibraries { get; set; } = new List<LockFileProjectLibrary>();
|
public IList<LockFileProjectLibrary> ProjectLibraries { get; set; } = new List<LockFileProjectLibrary>();
|
||||||
public IList<LockFileTarget> Targets { get; set; } = new List<LockFileTarget>();
|
public IList<LockFileTarget> Targets { get; set; } = new List<LockFileTarget>();
|
||||||
public ExportFile ExportFile { get; set; }
|
public ExportFile ExportFile { get; set; }
|
||||||
|
public IList<LockFilePackageFolder> PackageFolders { get; set; } = new List<LockFilePackageFolder>();
|
||||||
|
|
||||||
public LockFile(string lockFilePath)
|
public LockFile(string lockFilePath)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||||
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.ProjectModel.Graph
|
||||||
|
{
|
||||||
|
public class LockFilePackageFolder
|
||||||
|
{
|
||||||
|
public string Path { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -117,6 +117,7 @@ namespace Microsoft.DotNet.ProjectModel.Graph
|
||||||
lockFile.Targets = ReadObject(cursor.Value<JObject>("targets"), ReadTarget);
|
lockFile.Targets = ReadObject(cursor.Value<JObject>("targets"), ReadTarget);
|
||||||
lockFile.ProjectFileDependencyGroups = ReadObject(cursor.Value<JObject>("projectFileDependencyGroups"), ReadProjectFileDependencyGroup);
|
lockFile.ProjectFileDependencyGroups = ReadObject(cursor.Value<JObject>("projectFileDependencyGroups"), ReadProjectFileDependencyGroup);
|
||||||
ReadLibrary(cursor.Value<JObject>("libraries"), lockFile);
|
ReadLibrary(cursor.Value<JObject>("libraries"), lockFile);
|
||||||
|
lockFile.PackageFolders = ReadObject(cursor.Value<JObject>("packageFolders"), ReadPackageFolder);
|
||||||
|
|
||||||
return lockFile;
|
return lockFile;
|
||||||
}
|
}
|
||||||
|
@ -194,6 +195,20 @@ namespace Microsoft.DotNet.ProjectModel.Graph
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LockFilePackageFolder ReadPackageFolder(string property, JToken json)
|
||||||
|
{
|
||||||
|
var jobject = json as JObject;
|
||||||
|
if (jobject == null)
|
||||||
|
{
|
||||||
|
throw FileFormatException.Create("The value type is not an object.", json);
|
||||||
|
}
|
||||||
|
|
||||||
|
var packageFolder = new LockFilePackageFolder();
|
||||||
|
packageFolder.Path = property;
|
||||||
|
|
||||||
|
return packageFolder;
|
||||||
|
}
|
||||||
|
|
||||||
private LockFileTargetLibrary ReadTargetLibrary(string property, JToken json)
|
private LockFileTargetLibrary ReadTargetLibrary(string property, JToken json)
|
||||||
{
|
{
|
||||||
var jobject = json as JObject;
|
var jobject = json as JObject;
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.DotNet.InternalAbstractions;
|
using Microsoft.DotNet.InternalAbstractions;
|
||||||
using Microsoft.DotNet.ProjectModel.Graph;
|
using Microsoft.DotNet.ProjectModel.Graph;
|
||||||
using Microsoft.DotNet.ProjectModel.Resolution;
|
using Microsoft.DotNet.ProjectModel.Resolution;
|
||||||
|
using NuGet.Common;
|
||||||
|
using NuGet.Configuration;
|
||||||
using NuGet.Frameworks;
|
using NuGet.Frameworks;
|
||||||
|
|
||||||
namespace Microsoft.DotNet.ProjectModel
|
namespace Microsoft.DotNet.ProjectModel
|
||||||
|
@ -210,7 +210,6 @@ namespace Microsoft.DotNet.ProjectModel
|
||||||
}
|
}
|
||||||
|
|
||||||
RootDirectory = globalSettings?.DirectoryPath ?? RootDirectory;
|
RootDirectory = globalSettings?.DirectoryPath ?? RootDirectory;
|
||||||
PackagesDirectory = PackagesDirectory ?? PackageDependencyProvider.ResolvePackagesPath(RootDirectory, globalSettings);
|
|
||||||
|
|
||||||
FrameworkReferenceResolver frameworkReferenceResolver;
|
FrameworkReferenceResolver frameworkReferenceResolver;
|
||||||
if (string.IsNullOrEmpty(ReferenceAssembliesPath))
|
if (string.IsNullOrEmpty(ReferenceAssembliesPath))
|
||||||
|
@ -228,6 +227,17 @@ namespace Microsoft.DotNet.ProjectModel
|
||||||
|
|
||||||
ReadLockFile(diagnostics);
|
ReadLockFile(diagnostics);
|
||||||
|
|
||||||
|
// some callers only give ProjectContextBuilder a LockFile
|
||||||
|
ProjectDirectory = ProjectDirectory ?? TryGetProjectDirectoryFromLockFile();
|
||||||
|
|
||||||
|
INuGetPathContext nugetPathContext = null;
|
||||||
|
if (ProjectDirectory != null)
|
||||||
|
{
|
||||||
|
nugetPathContext = NuGetPathContext.Create(ProjectDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
PackagesDirectory = PackagesDirectory ?? nugetPathContext?.UserPackageFolder;
|
||||||
|
|
||||||
var validLockFile = true;
|
var validLockFile = true;
|
||||||
string lockFileValidationMessage = null;
|
string lockFileValidationMessage = null;
|
||||||
|
|
||||||
|
@ -271,7 +281,7 @@ namespace Microsoft.DotNet.ProjectModel
|
||||||
target = SelectTarget(LockFile, isPortable);
|
target = SelectTarget(LockFile, isPortable);
|
||||||
if (target != null)
|
if (target != null)
|
||||||
{
|
{
|
||||||
var nugetPackageResolver = new PackageDependencyProvider(PackagesDirectory, frameworkReferenceResolver);
|
var nugetPackageResolver = new PackageDependencyProvider(nugetPathContext, frameworkReferenceResolver);
|
||||||
var msbuildProjectResolver = new MSBuildDependencyProvider(Project, ProjectResolver);
|
var msbuildProjectResolver = new MSBuildDependencyProvider(Project, ProjectResolver);
|
||||||
ScanLibraries(target, lockFileLookup, libraries, msbuildProjectResolver, nugetPackageResolver, projectResolver);
|
ScanLibraries(target, lockFileLookup, libraries, msbuildProjectResolver, nugetPackageResolver, projectResolver);
|
||||||
|
|
||||||
|
@ -377,6 +387,18 @@ namespace Microsoft.DotNet.ProjectModel
|
||||||
diagnostics);
|
diagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string TryGetProjectDirectoryFromLockFile()
|
||||||
|
{
|
||||||
|
string result = null;
|
||||||
|
|
||||||
|
if (LockFile != null && !string.IsNullOrEmpty(LockFile.LockFilePath))
|
||||||
|
{
|
||||||
|
result = Path.GetDirectoryName(LockFile.LockFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private void ReadLockFile(ICollection<DiagnosticMessage> diagnostics)
|
private void ReadLockFile(ICollection<DiagnosticMessage> diagnostics)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
|
@ -8,6 +8,7 @@ using System.Linq;
|
||||||
using System.Reflection.Metadata;
|
using System.Reflection.Metadata;
|
||||||
using System.Reflection.PortableExecutable;
|
using System.Reflection.PortableExecutable;
|
||||||
using Microsoft.DotNet.ProjectModel.Graph;
|
using Microsoft.DotNet.ProjectModel.Graph;
|
||||||
|
using NuGet.Common;
|
||||||
using NuGet.Frameworks;
|
using NuGet.Frameworks;
|
||||||
using NuGet.Packaging;
|
using NuGet.Packaging;
|
||||||
|
|
||||||
|
@ -15,12 +16,16 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
|
||||||
{
|
{
|
||||||
public class PackageDependencyProvider
|
public class PackageDependencyProvider
|
||||||
{
|
{
|
||||||
private readonly VersionFolderPathResolver _packagePathResolver;
|
private readonly FallbackPackagePathResolver _packagePathResolver;
|
||||||
private readonly FrameworkReferenceResolver _frameworkReferenceResolver;
|
private readonly FrameworkReferenceResolver _frameworkReferenceResolver;
|
||||||
|
|
||||||
public PackageDependencyProvider(string packagesPath, FrameworkReferenceResolver frameworkReferenceResolver)
|
public PackageDependencyProvider(INuGetPathContext nugetPathContext, FrameworkReferenceResolver frameworkReferenceResolver)
|
||||||
{
|
{
|
||||||
_packagePathResolver = new VersionFolderPathResolver(packagesPath);
|
if (nugetPathContext != null)
|
||||||
|
{
|
||||||
|
_packagePathResolver = new FallbackPackagePathResolver(nugetPathContext);
|
||||||
|
}
|
||||||
|
|
||||||
_frameworkReferenceResolver = frameworkReferenceResolver;
|
_frameworkReferenceResolver = frameworkReferenceResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,8 +45,8 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
|
||||||
var dependencies = new List<LibraryRange>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count);
|
var dependencies = new List<LibraryRange>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count);
|
||||||
PopulateDependencies(dependencies, targetLibrary, targetFramework);
|
PopulateDependencies(dependencies, targetLibrary, targetFramework);
|
||||||
|
|
||||||
var path = _packagePathResolver.GetInstallPath(package.Name, package.Version);
|
var path = _packagePathResolver?.GetPackageDirectory(package.Name, package.Version);
|
||||||
var exists = Directory.Exists(path);
|
bool exists = path != null;
|
||||||
|
|
||||||
if (exists)
|
if (exists)
|
||||||
{
|
{
|
||||||
|
@ -155,35 +160,5 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
|
||||||
{
|
{
|
||||||
return string.Equals(Path.GetFileName(path), "_._", StringComparison.Ordinal);
|
return string.Equals(Path.GetFileName(path), "_._", StringComparison.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ResolvePackagesPath(string rootDirectory, GlobalSettings settings)
|
|
||||||
{
|
|
||||||
// Order
|
|
||||||
// 1. global.json { "packages": "..." }
|
|
||||||
// 2. EnvironmentNames.PackagesStore environment variable
|
|
||||||
// 3. NuGet.config repositoryPath (maybe)?
|
|
||||||
// 4. {DefaultLocalRuntimeHomeDir}\packages
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(settings?.PackagesPath))
|
|
||||||
{
|
|
||||||
return Path.Combine(rootDirectory, settings.PackagesPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
var runtimePackages = Environment.GetEnvironmentVariable(EnvironmentNames.PackagesStore);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(runtimePackages))
|
|
||||||
{
|
|
||||||
return runtimePackages;
|
|
||||||
}
|
|
||||||
|
|
||||||
var profileDirectory = Environment.GetEnvironmentVariable("USERPROFILE");
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(profileDirectory))
|
|
||||||
{
|
|
||||||
profileDirectory = Environment.GetEnvironmentVariable("HOME");
|
|
||||||
}
|
|
||||||
|
|
||||||
return Path.Combine(profileDirectory, ".nuget", "packages");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"target": "project"
|
"target": "project"
|
||||||
},
|
},
|
||||||
"Newtonsoft.Json": "9.0.1",
|
"Newtonsoft.Json": "9.0.1",
|
||||||
|
"NuGet.Configuration": "3.5.0-rc1-1653",
|
||||||
"NuGet.Packaging": "3.5.0-rc1-1653",
|
"NuGet.Packaging": "3.5.0-rc1-1653",
|
||||||
"NuGet.RuntimeModel": "3.5.0-rc1-1653",
|
"NuGet.RuntimeModel": "3.5.0-rc1-1653",
|
||||||
"System.Reflection.Metadata": "1.3.0"
|
"System.Reflection.Metadata": "1.3.0"
|
||||||
|
|
|
@ -53,7 +53,8 @@ namespace Microsoft.Extensions.DependencyModel.Resolution
|
||||||
if (ResolverUtils.TryResolvePackagePath(_fileSystem, library, _packageCacheDirectory, out packagePath))
|
if (ResolverUtils.TryResolvePackagePath(_fileSystem, library, _packageCacheDirectory, out packagePath))
|
||||||
{
|
{
|
||||||
var hashAlgorithm = library.Hash.Substring(0, hashSplitterPos);
|
var hashAlgorithm = library.Hash.Substring(0, hashSplitterPos);
|
||||||
var cacheHashPath = Path.Combine(packagePath, $"{library.Name}.{library.Version}.nupkg.{hashAlgorithm}");
|
var cacheHashFileName = $"{library.Name.ToLowerInvariant()}.{library.Version.ToLowerInvariant()}.nupkg.{hashAlgorithm}";
|
||||||
|
var cacheHashPath = Path.Combine(packagePath, cacheHashFileName);
|
||||||
|
|
||||||
if (_fileSystem.File.Exists(cacheHashPath) &&
|
if (_fileSystem.File.Exists(cacheHashPath) &&
|
||||||
_fileSystem.File.ReadAllText(cacheHashPath) == library.Hash.Substring(hashSplitterPos + 1))
|
_fileSystem.File.ReadAllText(cacheHashPath) == library.Hash.Substring(hashSplitterPos + 1))
|
||||||
|
|
|
@ -12,7 +12,11 @@ namespace Microsoft.Extensions.DependencyModel.Resolution
|
||||||
{
|
{
|
||||||
internal static bool TryResolvePackagePath(IFileSystem fileSystem, CompilationLibrary library, string basePath, out string packagePath)
|
internal static bool TryResolvePackagePath(IFileSystem fileSystem, CompilationLibrary library, string basePath, out string packagePath)
|
||||||
{
|
{
|
||||||
packagePath = Path.Combine(basePath, library.Name, library.Version);
|
packagePath = Path.Combine(
|
||||||
|
basePath,
|
||||||
|
library.Name.ToLowerInvariant(),
|
||||||
|
library.Version.ToLowerInvariant());
|
||||||
|
|
||||||
if (fileSystem.Directory.Exists(packagePath))
|
if (fileSystem.Directory.Exists(packagePath))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -13,6 +13,7 @@ using Microsoft.DotNet.Cli.Compiler.Common;
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
using Microsoft.DotNet.ProjectModel;
|
using Microsoft.DotNet.ProjectModel;
|
||||||
using Microsoft.DotNet.ProjectModel.Resolution;
|
using Microsoft.DotNet.ProjectModel.Resolution;
|
||||||
|
using NuGet.Configuration;
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Compiler.Fsc
|
namespace Microsoft.DotNet.Tools.Compiler.Fsc
|
||||||
{
|
{
|
||||||
|
@ -296,7 +297,7 @@ namespace Microsoft.DotNet.Tools.Compiler.Fsc
|
||||||
|
|
||||||
private static FscCommandSpec ResolveFsc(List<string> fscArgs, string temp)
|
private static FscCommandSpec ResolveFsc(List<string> fscArgs, string temp)
|
||||||
{
|
{
|
||||||
var nugetPackagesRoot = PackageDependencyProvider.ResolvePackagesPath(null, null);
|
var nugetPackagesRoot = NuGetPathContext.Create(Directory.GetCurrentDirectory())?.UserPackageFolder;
|
||||||
var depsFile = Path.Combine(AppContext.BaseDirectory, "dotnet-compile-fsc" + FileNameSuffixes.DepsJson);
|
var depsFile = Path.Combine(AppContext.BaseDirectory, "dotnet-compile-fsc" + FileNameSuffixes.DepsJson);
|
||||||
|
|
||||||
var depsJsonCommandResolver = new DepsJsonCommandResolver(nugetPackagesRoot);
|
var depsJsonCommandResolver = new DepsJsonCommandResolver(nugetPackagesRoot);
|
||||||
|
|
|
@ -145,13 +145,16 @@ namespace Microsoft.DotNet.Tools.Run
|
||||||
}
|
}
|
||||||
|
|
||||||
List<string> hostArgs = new List<string>();
|
List<string> hostArgs = new List<string>();
|
||||||
if (!_context.TargetFramework.IsDesktop())
|
if (!_context.TargetFramework.IsDesktop() && _context.LockFile != null)
|
||||||
{
|
{
|
||||||
// Add Nuget Packages Probing Path
|
// Add Nuget Packages Probing Paths
|
||||||
var nugetPackagesRoot = _context.PackagesDirectory;
|
const string probingPathArg = "--additionalprobingpath";
|
||||||
var probingPathArg = "--additionalprobingpath";
|
|
||||||
hostArgs.Insert(0, nugetPackagesRoot);
|
foreach (var packageFolder in _context.LockFile.PackageFolders)
|
||||||
hostArgs.Insert(0, probingPathArg);
|
{
|
||||||
|
hostArgs.Insert(0, packageFolder.Path);
|
||||||
|
hostArgs.Insert(0, probingPathArg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now launch the output and give it the results
|
// Now launch the output and give it the results
|
||||||
|
|
|
@ -120,6 +120,17 @@ namespace Microsoft.DotNet.ProjectModel.Tests
|
||||||
Assert.NotNull(LockFileReader.Read(lockFilePath, designTime: true));
|
Assert.NotNull(LockFileReader.Read(lockFilePath, designTime: true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestPackageFoldersLoadCorrectly()
|
||||||
|
{
|
||||||
|
var lockFilePath = GetLockFilePath("valid");
|
||||||
|
var lockFile = LockFileReader.Read(lockFilePath, designTime: false);
|
||||||
|
|
||||||
|
Assert.Equal(2, lockFile.PackageFolders.Count);
|
||||||
|
Assert.Equal("/foo/packages", lockFile.PackageFolders[0].Path);
|
||||||
|
Assert.Equal("/foo/packages2", lockFile.PackageFolders[1].Path);
|
||||||
|
}
|
||||||
|
|
||||||
private static int LibraryNumberFromName(Microsoft.DotNet.ProjectModel.Graph.LockFileTargetLibrary library)
|
private static int LibraryNumberFromName(Microsoft.DotNet.ProjectModel.Graph.LockFileTargetLibrary library)
|
||||||
{
|
{
|
||||||
var libraryName = library.Name;
|
var libraryName = library.Name;
|
||||||
|
|
|
@ -3,6 +3,7 @@ using Microsoft.DotNet.ProjectModel.Graph;
|
||||||
using Microsoft.DotNet.ProjectModel.Resolution;
|
using Microsoft.DotNet.ProjectModel.Resolution;
|
||||||
using Microsoft.DotNet.TestFramework;
|
using Microsoft.DotNet.TestFramework;
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||||
|
using NuGet.Configuration;
|
||||||
using NuGet.Frameworks;
|
using NuGet.Frameworks;
|
||||||
using NuGet.Versioning;
|
using NuGet.Versioning;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
@ -15,7 +16,7 @@ namespace Microsoft.DotNet.ProjectModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetDescriptionShouldNotModifyTarget()
|
public void GetDescriptionShouldNotModifyTarget()
|
||||||
{
|
{
|
||||||
var provider = new PackageDependencyProvider("/foo/packages", new FrameworkReferenceResolver("/foo/references"));
|
var provider = new PackageDependencyProvider(NuGetPathContext.Create("/foo/packages"), new FrameworkReferenceResolver("/foo/references"));
|
||||||
var package = new LockFilePackageLibrary();
|
var package = new LockFilePackageLibrary();
|
||||||
package.Name = "Something";
|
package.Name = "Something";
|
||||||
package.Version = NuGetVersion.Parse("1.0.0");
|
package.Version = NuGetVersion.Parse("1.0.0");
|
||||||
|
@ -46,7 +47,7 @@ namespace Microsoft.DotNet.ProjectModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void HasCompileTimePlaceholderChecksAllCompileTimeAssets()
|
public void HasCompileTimePlaceholderChecksAllCompileTimeAssets()
|
||||||
{
|
{
|
||||||
var provider = new PackageDependencyProvider("/foo/packages", new FrameworkReferenceResolver("/foo/references"));
|
var provider = new PackageDependencyProvider(NuGetPathContext.Create("/foo/packages"), new FrameworkReferenceResolver("/foo/references"));
|
||||||
var package = new LockFilePackageLibrary();
|
var package = new LockFilePackageLibrary();
|
||||||
package.Name = "Something";
|
package.Name = "Something";
|
||||||
package.Version = NuGetVersion.Parse("1.0.0");
|
package.Version = NuGetVersion.Parse("1.0.0");
|
||||||
|
@ -74,7 +75,7 @@ namespace Microsoft.DotNet.ProjectModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void HasCompileTimePlaceholderReturnsFalseIfEmpty()
|
public void HasCompileTimePlaceholderReturnsFalseIfEmpty()
|
||||||
{
|
{
|
||||||
var provider = new PackageDependencyProvider("/foo/packages", new FrameworkReferenceResolver("/foo/references"));
|
var provider = new PackageDependencyProvider(NuGetPathContext.Create("/foo/packages"), new FrameworkReferenceResolver("/foo/references"));
|
||||||
var package = new LockFilePackageLibrary();
|
var package = new LockFilePackageLibrary();
|
||||||
package.Name = "Something";
|
package.Name = "Something";
|
||||||
package.Version = NuGetVersion.Parse("1.0.0");
|
package.Version = NuGetVersion.Parse("1.0.0");
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SholdUseEnvironmentVariableToGetDefaultLocation()
|
public void SholdUseEnvironmentVariableToGetDefaultLocation()
|
||||||
{
|
{
|
||||||
var result = PackageCacheCompilationAssemblyResolver.GetDefaultPackageCacheDirectory(GetDefaultEnviroment());
|
var result = PackageCacheCompilationAssemblyResolver.GetDefaultPackageCacheDirectory(GetDefaultEnvironment());
|
||||||
|
|
||||||
result.Should().Be(CachePath);
|
result.Should().Be(CachePath);
|
||||||
}
|
}
|
||||||
|
@ -55,10 +55,10 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ChecksHashFile()
|
public void ChecksHashFile()
|
||||||
{
|
{
|
||||||
var packagePath = Path.Combine(CachePath, F.DefaultPackageName, F.DefaultVersion);
|
var packagePath = GetPackagesPath(F.DefaultPackageName, F.DefaultVersion);
|
||||||
var fileSystem = FileSystemMockBuilder.Create()
|
var fileSystem = FileSystemMockBuilder.Create()
|
||||||
.AddFile(
|
.AddFile(
|
||||||
Path.Combine(packagePath, $"{F.DefaultPackageName}.{F.DefaultVersion}.nupkg.{F.DefaultHashAlgoritm}"),
|
GetHashFilePath(packagePath),
|
||||||
"WRONGHASH"
|
"WRONGHASH"
|
||||||
)
|
)
|
||||||
.AddFiles(packagePath, F.DefaultAssemblies)
|
.AddFiles(packagePath, F.DefaultAssemblies)
|
||||||
|
@ -74,10 +74,10 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ResolvesAllAssemblies()
|
public void ResolvesAllAssemblies()
|
||||||
{
|
{
|
||||||
var packagePath = Path.Combine(CachePath, F.DefaultPackageName, F.DefaultVersion);
|
var packagePath = GetPackagesPath(F.DefaultPackageName, F.DefaultVersion);
|
||||||
var fileSystem = FileSystemMockBuilder.Create()
|
var fileSystem = FileSystemMockBuilder.Create()
|
||||||
.AddFile(
|
.AddFile(
|
||||||
Path.Combine(packagePath, $"{F.DefaultPackageName}.{F.DefaultVersion}.nupkg.{F.DefaultHashAlgoritm}"),
|
GetHashFilePath(packagePath),
|
||||||
F.DefaultHashValue
|
F.DefaultHashValue
|
||||||
)
|
)
|
||||||
.AddFiles(packagePath, F.TwoAssemblies)
|
.AddFiles(packagePath, F.TwoAssemblies)
|
||||||
|
@ -98,10 +98,10 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void FailsWhenOneOfAssembliesNotFound()
|
public void FailsWhenOneOfAssembliesNotFound()
|
||||||
{
|
{
|
||||||
var packagePath = Path.Combine(CachePath, F.DefaultPackageName, F.DefaultVersion);
|
var packagePath = GetPackagesPath(F.DefaultPackageName, F.DefaultVersion);
|
||||||
var fileSystem = FileSystemMockBuilder.Create()
|
var fileSystem = FileSystemMockBuilder.Create()
|
||||||
.AddFile(
|
.AddFile(
|
||||||
Path.Combine(packagePath, $"{F.DefaultPackageName}.{F.DefaultVersion}.nupkg.{F.DefaultHashAlgoritm}"),
|
GetHashFilePath(packagePath),
|
||||||
F.DefaultHashValue
|
F.DefaultHashValue
|
||||||
)
|
)
|
||||||
.AddFiles(packagePath, F.DefaultAssemblyPath)
|
.AddFiles(packagePath, F.DefaultAssemblyPath)
|
||||||
|
@ -117,13 +117,23 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
.And.Contain(library.Name);
|
.And.Contain(library.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnvironment GetDefaultEnviroment()
|
private IEnvironment GetDefaultEnvironment()
|
||||||
{
|
{
|
||||||
return EnvironmentMockBuilder.Create()
|
return EnvironmentMockBuilder.Create()
|
||||||
.AddVariable("DOTNET_PACKAGES_CACHE", CachePath)
|
.AddVariable("DOTNET_PACKAGES_CACHE", CachePath)
|
||||||
.Build();
|
.Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string GetPackagesPath(string id, string version)
|
||||||
|
{
|
||||||
|
return PackageResolverTest.GetPackagesPath(CachePath, id, version);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetHashFilePath(string packagePath)
|
||||||
|
{
|
||||||
|
return Path.Combine(
|
||||||
|
packagePath,
|
||||||
|
$"{F.DefaultPackageName.ToLowerInvariant()}.{F.DefaultVersion.ToLowerInvariant()}.nupkg.{F.DefaultHashAlgoritm}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
private static string PackagesPath = Path.Combine("package", "directory", "location");
|
private static string PackagesPath = Path.Combine("package", "directory", "location");
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SholdUseEnvironmentVariableToGetDefaultLocation()
|
public void ShouldUseEnvironmentVariableToGetDefaultLocation()
|
||||||
{
|
{
|
||||||
var environment = EnvironmentMockBuilder.Create()
|
var environment = EnvironmentMockBuilder.Create()
|
||||||
.AddVariable("NUGET_PACKAGES", PackagesPath)
|
.AddVariable("NUGET_PACKAGES", PackagesPath)
|
||||||
|
@ -29,7 +29,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SholdUseNugetUnderUserProfileOnWindows()
|
public void ShouldUseNugetUnderUserProfileOnWindows()
|
||||||
{
|
{
|
||||||
var environment = EnvironmentMockBuilder.Create()
|
var environment = EnvironmentMockBuilder.Create()
|
||||||
.AddVariable("USERPROFILE", "User Profile")
|
.AddVariable("USERPROFILE", "User Profile")
|
||||||
|
@ -40,7 +40,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SholdUseNugetUnderHomeOnNonWindows()
|
public void ShouldUseNugetUnderHomeOnNonWindows()
|
||||||
{
|
{
|
||||||
var environment = EnvironmentMockBuilder.Create()
|
var environment = EnvironmentMockBuilder.Create()
|
||||||
.AddVariable("HOME", "User Home")
|
.AddVariable("HOME", "User Home")
|
||||||
|
@ -53,7 +53,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ResolvesAllAssemblies()
|
public void ResolvesAllAssemblies()
|
||||||
{
|
{
|
||||||
var packagePath = Path.Combine(PackagesPath, F.DefaultPackageName, F.DefaultVersion);
|
var packagePath = GetPackagesPath(F.DefaultPackageName, F.DefaultVersion);
|
||||||
var fileSystem = FileSystemMockBuilder.Create()
|
var fileSystem = FileSystemMockBuilder.Create()
|
||||||
.AddFiles(packagePath, F.TwoAssemblies)
|
.AddFiles(packagePath, F.TwoAssemblies)
|
||||||
.Build();
|
.Build();
|
||||||
|
@ -73,7 +73,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
[Fact]
|
[Fact]
|
||||||
public void FailsWhenOneOfAssembliesNotFound()
|
public void FailsWhenOneOfAssembliesNotFound()
|
||||||
{
|
{
|
||||||
var packagePath = Path.Combine(PackagesPath, F.DefaultPackageName, F.DefaultVersion);
|
var packagePath = GetPackagesPath(F.DefaultPackageName, F.DefaultVersion);
|
||||||
var fileSystem = FileSystemMockBuilder.Create()
|
var fileSystem = FileSystemMockBuilder.Create()
|
||||||
.AddFiles(packagePath, F.DefaultAssemblyPath)
|
.AddFiles(packagePath, F.DefaultAssemblyPath)
|
||||||
.Build();
|
.Build();
|
||||||
|
@ -87,5 +87,15 @@ namespace Microsoft.Extensions.DependencyModel.Tests
|
||||||
.Contain(F.SecondAssemblyPath)
|
.Contain(F.SecondAssemblyPath)
|
||||||
.And.Contain(library.Name);
|
.And.Contain(library.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string GetPackagesPath(string id, string version)
|
||||||
|
{
|
||||||
|
return GetPackagesPath(PackagesPath, id, version);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static string GetPackagesPath(string basePath, string id, string version)
|
||||||
|
{
|
||||||
|
return Path.Combine(basePath, id.ToLowerInvariant(), version.ToLowerInvariant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ A command is running to initially populate your local package cache, to improve
|
||||||
[Fact]
|
[Fact]
|
||||||
public void It_creates_a_sentinel_file_under_the_nuget_cache_folder()
|
public void It_creates_a_sentinel_file_under_the_nuget_cache_folder()
|
||||||
{
|
{
|
||||||
_nugetCacheFolder.Should().HaveDirectory("Microsoft.NETCore.App");
|
_nugetCacheFolder.Should().HaveDirectory("microsoft.netcore.app");
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetDotnetVersion()
|
private string GetDotnetVersion()
|
Loading…
Reference in a new issue