Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Commit

Permalink
Read the probing path in DependencyModel
Browse files Browse the repository at this point in the history
  • Loading branch information
ramarag committed Apr 12, 2017
1 parent 05b1743 commit 08ea396
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,74 +11,95 @@ namespace Microsoft.Extensions.DependencyModel.Resolution
public class PackageCompilationAssemblyResolver: ICompilationAssemblyResolver
{
private readonly IFileSystem _fileSystem;
private readonly string _nugetPackageDirectory;
private readonly string[] _nugetPackageDirectories;

public PackageCompilationAssemblyResolver()
: this(EnvironmentWrapper.Default, FileSystemWrapper.Default)
{
}

public PackageCompilationAssemblyResolver(string nugetPackageDirectory)
: this(FileSystemWrapper.Default, nugetPackageDirectory)
: this(FileSystemWrapper.Default, new string[] {nugetPackageDirectory})
{
}

internal PackageCompilationAssemblyResolver(IEnvironment environment,
IFileSystem fileSystem)
: this(fileSystem, GetDefaultPackageDirectory(environment))
: this(fileSystem, GetDefaultProbeDirectories(environment))
{
}

internal PackageCompilationAssemblyResolver(IFileSystem fileSystem, string nugetPackageDirectory)
internal PackageCompilationAssemblyResolver(IFileSystem fileSystem, string[] nugetPackageDirectories)
{
_fileSystem = fileSystem;
_nugetPackageDirectory = nugetPackageDirectory;
_nugetPackageDirectories = nugetPackageDirectories;
}

private static string GetDefaultPackageDirectory(IEnvironment environment) =>
GetDefaultPackageDirectory(RuntimeEnvironment.OperatingSystemPlatform, environment);
private static string[] GetDefaultProbeDirectories(IEnvironment environment) =>
GetDefaultProbeDirectories(RuntimeEnvironment.OperatingSystemPlatform, environment);

internal static string GetDefaultPackageDirectory(Platform osPlatform, IEnvironment environment)
internal static string[] GetDefaultProbeDirectories(Platform osPlatform, IEnvironment environment)
{
var packageDirectory = environment.GetEnvironmentVariable("NUGET_PACKAGES");
#if !NETSTANDARD1_3
#if NETSTANDARD1_6
var probeDirectories = AppContext.GetData("PROBING_DIRECTORIES");
#else
var probeDirectories = AppDomain.CurrentDomain.GetData("PROBING_DIRECTORIES");
#endif

if (!string.IsNullOrEmpty(packageDirectory))
{
return packageDirectory;
}
var listOfDirectories = probeDirectories as string;

if (!string.IsNullOrEmpty(listOfDirectories))
{
return listOfDirectories.Split(new char [] {Path.PathSeparator}, StringSplitOptions.RemoveEmptyEntries );
}
#endif

var packageDirectory = environment.GetEnvironmentVariable("NUGET_PACKAGES");

if (!string.IsNullOrEmpty(packageDirectory))
{
return new string[] {packageDirectory};
}

string basePath;
if (osPlatform == Platform.Windows)
{
basePath = environment.GetEnvironmentVariable("USERPROFILE");
}
else
{
basePath = environment.GetEnvironmentVariable("HOME");
}

if (string.IsNullOrEmpty(basePath))
{
return new string[] {string.Empty};
}

return new string[] {Path.Combine(basePath, ".nuget", "packages")};

string basePath;
if (osPlatform == Platform.Windows)
{
basePath = environment.GetEnvironmentVariable("USERPROFILE");
}
else
{
basePath = environment.GetEnvironmentVariable("HOME");
}
if (string.IsNullOrEmpty(basePath))
{
return null;
}
return Path.Combine(basePath, ".nuget", "packages");
}

public bool TryResolveAssemblyPaths(CompilationLibrary library, List<string> assemblies)
{
if (string.IsNullOrEmpty(_nugetPackageDirectory) ||
if (_nugetPackageDirectories == null || _nugetPackageDirectories.Length < 1 ||
!string.Equals(library.Type, "package", StringComparison.OrdinalIgnoreCase))
{
return false;
}

string packagePath;

if (ResolverUtils.TryResolvePackagePath(_fileSystem, library, _nugetPackageDirectory, out packagePath))
foreach (var directory in _nugetPackageDirectories)
{
assemblies.AddRange(ResolverUtils.ResolveFromPackagePath(_fileSystem, library, packagePath));
return true;
string packagePath;

if (ResolverUtils.TryResolvePackagePath(_fileSystem, library, directory, out packagePath))
{
assemblies.AddRange(ResolverUtils.ResolveFromPackagePath(_fileSystem, library, packagePath));
return true;
}
}
return false;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ public void ShouldUseEnvironmentVariableToGetDefaultLocation()
.AddVariable("NUGET_PACKAGES", PackagesPath)
.Build();

var result = PackageCompilationAssemblyResolver.GetDefaultPackageDirectory(Platform.Unknown, environment);
result.Should().Be(PackagesPath);
var result = PackageCompilationAssemblyResolver.GetDefaultProbeDirectories(Platform.Unknown, environment);
result.Should().Contain(PackagesPath);
}


Expand All @@ -36,8 +36,8 @@ public void ShouldUseNugetUnderUserProfileOnWindows()
.AddVariable("USERPROFILE", "User Profile")
.Build();

var result = PackageCompilationAssemblyResolver.GetDefaultPackageDirectory(Platform.Windows, environment);
result.Should().Be(Path.Combine("User Profile", ".nuget", "packages"));
var result = PackageCompilationAssemblyResolver.GetDefaultProbeDirectories(Platform.Windows, environment);
result.Should().Contain(Path.Combine("User Profile", ".nuget", "packages"));
}

[Fact]
Expand All @@ -47,8 +47,8 @@ public void ShouldUseNugetUnderHomeOnNonWindows()
.AddVariable("HOME", "User Home")
.Build();

var result = PackageCompilationAssemblyResolver.GetDefaultPackageDirectory(Platform.Linux, environment);
result.Should().Be(Path.Combine("User Home", ".nuget", "packages"));
var result = PackageCompilationAssemblyResolver.GetDefaultProbeDirectories(Platform.Linux, environment);
result.Should().Contain(Path.Combine("User Home", ".nuget", "packages"));
}

[Fact]
Expand All @@ -60,7 +60,7 @@ public void ResolvesAllAssemblies()
.Build();
var library = F.Create(assemblies: F.TwoAssemblies);

var resolver = new PackageCompilationAssemblyResolver(fileSystem, PackagesPath);
var resolver = new PackageCompilationAssemblyResolver(fileSystem, new string[] {PackagesPath});
var assemblies = new List<string>();

var result = resolver.TryResolveAssemblyPaths(library, assemblies);
Expand All @@ -80,7 +80,7 @@ public void FailsWhenOneOfAssembliesNotFound()
.Build();
var library = F.Create(assemblies: F.TwoAssemblies);

var resolver = new PackageCompilationAssemblyResolver(fileSystem, PackagesPath);
var resolver = new PackageCompilationAssemblyResolver(fileSystem, new string[] {PackagesPath});
var assemblies = new List<string>();

var exception = Assert.Throws<InvalidOperationException>(() => resolver.TryResolveAssemblyPaths(library, assemblies));
Expand Down

0 comments on commit 08ea396

Please sign in to comment.