From 93570ea4aaec3d94898eba495a815e3c30e6af3f Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Wed, 17 Feb 2016 16:39:48 -0800 Subject: [PATCH] Fix app local resolution logic --- .../AppBaseCompilationAssemblyResolver.cs | 18 ++++-- .../AppBaseResolverTests.cs | 59 ++++++++++++++++++- 2 files changed, 69 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.Extensions.DependencyModel/Resolution/AppBaseCompilationAssemblyResolver.cs b/src/Microsoft.Extensions.DependencyModel/Resolution/AppBaseCompilationAssemblyResolver.cs index 0e9c4acac..f5f681f86 100644 --- a/src/Microsoft.Extensions.DependencyModel/Resolution/AppBaseCompilationAssemblyResolver.cs +++ b/src/Microsoft.Extensions.DependencyModel/Resolution/AppBaseCompilationAssemblyResolver.cs @@ -37,21 +37,29 @@ namespace Microsoft.Extensions.DependencyModel.Resolution public bool TryResolveAssemblyPaths(CompilationLibrary library, List assemblies) { - if (!string.Equals(library.LibraryType, "package", StringComparison.OrdinalIgnoreCase) && - !string.Equals(library.LibraryType, "project", StringComparison.OrdinalIgnoreCase) && + var isProject = string.Equals(library.LibraryType, "project", StringComparison.OrdinalIgnoreCase); + + if (!isProject && + !string.Equals(library.LibraryType, "package", StringComparison.OrdinalIgnoreCase) && !string.Equals(library.LibraryType, "referenceassembly", StringComparison.OrdinalIgnoreCase)) { return false; } + var refsPath = Path.Combine(_basePath, "refs"); + var hasRefs = _fileSystem.Directory.Exists(refsPath); + + // Resolving packages and reference assebmlies requires refs folder to exist + if (!isProject && !hasRefs) + { + return false; + } + var directories = new List() { _basePath }; - var refsPath = Path.Combine(_basePath, "refs"); - var hasRefs = _fileSystem.Directory.Exists(refsPath); - if (hasRefs) { directories.Insert(0, refsPath); diff --git a/test/Microsoft.Extensions.DependencyModel.Tests/AppBaseResolverTests.cs b/test/Microsoft.Extensions.DependencyModel.Tests/AppBaseResolverTests.cs index 66f1d6c52..eb1ce55ca 100644 --- a/test/Microsoft.Extensions.DependencyModel.Tests/AppBaseResolverTests.cs +++ b/test/Microsoft.Extensions.DependencyModel.Tests/AppBaseResolverTests.cs @@ -21,7 +21,11 @@ namespace Microsoft.Extensions.DependencyModel.Tests [Fact] public void ResolvesProjectType() { - var resolver = new AppBaseCompilationAssemblyResolver(); + var fileSystem = FileSystemMockBuilder + .Create() + .AddFiles(BasePathRefs, TestLibraryFactory.DefaultAssembly) + .Build(); + var resolver = new AppBaseCompilationAssemblyResolver(fileSystem, BasePath); var library = TestLibraryFactory.Create( TestLibraryFactory.ProjectType, assemblies: TestLibraryFactory.EmptyAssemblies); @@ -34,7 +38,11 @@ namespace Microsoft.Extensions.DependencyModel.Tests [Fact] public void ResolvesPackageType() { - var resolver = new AppBaseCompilationAssemblyResolver(); + var fileSystem = FileSystemMockBuilder + .Create() + .AddFiles(BasePathRefs, TestLibraryFactory.DefaultAssembly) + .Build(); + var resolver = new AppBaseCompilationAssemblyResolver(fileSystem, BasePath); var library = TestLibraryFactory.Create( TestLibraryFactory.PackageType, assemblies: TestLibraryFactory.EmptyAssemblies); @@ -47,7 +55,11 @@ namespace Microsoft.Extensions.DependencyModel.Tests [Fact] public void ResolvesReferenceAssemblyType() { - var resolver = new AppBaseCompilationAssemblyResolver(); + var fileSystem = FileSystemMockBuilder + .Create() + .AddFiles(BasePathRefs, TestLibraryFactory.DefaultAssembly) + .Build(); + var resolver = new AppBaseCompilationAssemblyResolver(fileSystem, BasePath); var library = TestLibraryFactory.Create( TestLibraryFactory.ReferenceAssemblyType, assemblies: TestLibraryFactory.EmptyAssemblies); @@ -57,6 +69,46 @@ namespace Microsoft.Extensions.DependencyModel.Tests Assert.True(result); } + [Fact] + public void RequiresExistingRefsFolderForNonProjects() + { + var fileSystem = FileSystemMockBuilder + .Create() + .AddFiles(BasePath, TestLibraryFactory.DefaultAssembly, TestLibraryFactory.SecondAssembly) + .Build(); + var library = TestLibraryFactory.Create( + TestLibraryFactory.ReferenceAssemblyType, + assemblies: TestLibraryFactory.TwoAssemblies); + var resolver = new AppBaseCompilationAssemblyResolver(fileSystem, BasePath); + var assemblies = new List(); + + var result = resolver.TryResolveAssemblyPaths(library, assemblies); + + Assert.False(result); + assemblies.Should().HaveCount(0); + } + + [Fact] + public void ResolvesProjectWithoutRefsFolder() + { + var fileSystem = FileSystemMockBuilder + .Create() + .AddFiles(BasePath, TestLibraryFactory.DefaultAssembly, TestLibraryFactory.SecondAssembly) + .Build(); + var library = TestLibraryFactory.Create( + TestLibraryFactory.ProjectType, + assemblies: TestLibraryFactory.TwoAssemblies); + var resolver = new AppBaseCompilationAssemblyResolver(fileSystem, BasePath); + var assemblies = new List(); + + var result = resolver.TryResolveAssemblyPaths(library, assemblies); + + Assert.True(result); + assemblies.Should().HaveCount(2); + assemblies.Should().Contain(Path.Combine(BasePath, TestLibraryFactory.DefaultAssembly)); + assemblies.Should().Contain(Path.Combine(BasePath, TestLibraryFactory.SecondAssembly)); + } + [Fact] public void RequiresAllLibrariesToExist() { @@ -84,6 +136,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests var fileSystem = FileSystemMockBuilder .Create() .AddFiles(BasePath, TestLibraryFactory.DefaultAssembly, TestLibraryFactory.SecondAssembly) + .AddFiles(BasePathRefs, "Dummy.dll") .Build(); var library = TestLibraryFactory.Create( TestLibraryFactory.ReferenceAssemblyType,