Allow AppBaseCompilation assembly resolver to resolve 'reference' (dotnet/core-setup...
authorMatt Perry <muffinman616@gmail.com>
Wed, 23 Aug 2017 15:01:57 +0000 (11:01 -0400)
committerSteve Harter <steveharter@users.noreply.github.com>
Wed, 23 Aug 2017 15:01:57 +0000 (10:01 -0500)
* Allow direct references to be resolved when there is no refs folder

* Fix comment typo

Commit migrated from https://github.com/dotnet/core-setup/commit/7ccae7f07ea442e1df245eba0d487bec10b58bdd

src/installer/managed/Microsoft.Extensions.DependencyModel/Resolution/AppBaseCompilationAssemblyResolver.cs
src/installer/test/Microsoft.Extensions.DependencyModel.Tests/AppBaseResolverTests.cs
src/installer/test/Microsoft.Extensions.DependencyModel.Tests/TestLibraryFactory.cs

index 4500b42..7cbafac 100644 (file)
@@ -45,9 +45,11 @@ namespace Microsoft.Extensions.DependencyModel.Resolution
                 string.Equals(library.Type, "msbuildproject", StringComparison.OrdinalIgnoreCase);
 
             var isPackage = string.Equals(library.Type, "package", StringComparison.OrdinalIgnoreCase);
+            var isReferenceAssembly = string.Equals(library.Type, "referenceassembly", StringComparison.OrdinalIgnoreCase);
             if (!isProject &&
                 !isPackage &&
-                !string.Equals(library.Type, "referenceassembly", StringComparison.OrdinalIgnoreCase))
+                !isReferenceAssembly &&
+                !string.Equals(library.Type, "reference", StringComparison.OrdinalIgnoreCase))
             {
                 return false;
             }
@@ -55,8 +57,8 @@ namespace Microsoft.Extensions.DependencyModel.Resolution
             var refsPath = Path.Combine(_basePath, RefsDirectoryName);
             var isPublished = _fileSystem.Directory.Exists(refsPath);
 
-            // Resolving reference assebmlies requires refs folder to exist
-            if (!isProject && !isPackage && !isPublished)
+            // Resolving reference assemblies requires refs folder to exist
+            if (isReferenceAssembly && !isPublished)
             {
                 return false;
             }
index 0d3b8aa..4f3b99e 100644 (file)
@@ -90,6 +90,23 @@ namespace Microsoft.Extensions.DependencyModel.Tests
         }
 
         [Fact]
+        public void ResolvesReferenceType()
+        {
+            var fileSystem = FileSystemMockBuilder
+                .Create()
+                .AddFiles(BasePathRefs, TestLibraryFactory.DefaultAssembly)
+                .Build();
+            var resolver = CreateResolver(fileSystem);
+            var library = TestLibraryFactory.Create(
+                TestLibraryFactory.ReferenceType,
+                assemblies: TestLibraryFactory.EmptyAssemblies);
+
+            var result = resolver.TryResolveAssemblyPaths(library, null);
+
+            Assert.True(result);
+        }
+
+        [Fact]
         public void RequiresExistingRefsFolderForNonProjects()
         {
             var fileSystem = FileSystemMockBuilder
@@ -130,6 +147,27 @@ namespace Microsoft.Extensions.DependencyModel.Tests
         }
 
         [Fact]
+        public void ResolvesDirectReferenceWithoutRefsFolder()
+        {
+            var fileSystem = FileSystemMockBuilder
+                .Create()
+                .AddFiles(BasePath, TestLibraryFactory.DefaultAssembly, TestLibraryFactory.SecondAssembly)
+                .Build();
+            var library = TestLibraryFactory.Create(
+                TestLibraryFactory.ReferenceType,
+                assemblies: TestLibraryFactory.TwoAssemblies);
+            var resolver = CreateResolver(fileSystem);
+            var assemblies = new List<string>();
+
+            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()
         {
             var fileSystem = FileSystemMockBuilder
index a148858..e5e4e21 100644 (file)
@@ -30,6 +30,7 @@ namespace Microsoft.Extensions.DependencyModel.Tests
         public static readonly string ProjectType = "project";
         public static readonly string MsBuildProjectType = "msbuildproject";
         public static readonly string ReferenceAssemblyType = "referenceassembly";
+        public static readonly string ReferenceType = "reference";
         public static readonly string PackageType = "package";
 
         public static CompilationLibrary Create(