public void GetProjectName_WhenPackageIdOrAssemblyNameSpecified_CorretValueIsDetermined(string packageId, string assemblyName, string msbuildProjectName, string expected)
        {
            var project = new MockMSBuildProject(new Dictionary <string, string>
            {
                ["PackageId"]          = packageId,
                ["AssemblyName"]       = assemblyName,
                ["MSBuildProjectName"] = msbuildProjectName
            });

            var actual = MSBuildStaticGraphRestore.GetProjectName(project);

            actual.Should().Be(expected);
        }
Exemplo n.º 2
0
        public void IsCentralVersionsManagementEnabled_OnlyPackageReferenceWithProjectCPVMEnabledProperty(bool expected, ProjectStyle projectStyle)
        {
            // Arrange
            var project = new MockMSBuildProject(new Dictionary <string, string>
            {
                ["_CentralPackageVersionsEnabled"] = "true",
            });

            // Act + Assert
            var result = MSBuildStaticGraphRestore.IsCentralVersionsManagementEnabled(project, projectStyle);

            Assert.Equal(expected, result);
        }
        public void GetTargetFrameworkInfos_WithUAPProject_InfersUAPTargetFramework()
        {
            // Arrange
            string key = string.Empty;
            var    runtimeIdentifierGraphPath = Path.Combine(Path.GetTempPath(), "runtime.json");

            var project = new MockMSBuildProject("Project-core",
                                                 new Dictionary <string, string>
            {
                { "AssetTargetFallback", "" },
                { "PackageTargetFallback", "" },
                { "TargetFramework", key },
                { "TargetFrameworkIdentifier", FrameworkConstants.FrameworkIdentifiers.NetCore },
                { "TargetFrameworkVersion", "v5.0" },
                { "TargetFrameworkMoniker", $"{FrameworkConstants.FrameworkIdentifiers.NetCore},Version=5.0" },
                { "TargetPlatformIdentifier", "UAP" },
                { "TargetPlatformVersion", "10.1608.1" },
                { "TargetPlatformMoniker", "UAP,Version=10.1608.1" }
            },
                                                 new Dictionary <string, IList <IMSBuildItem> >
            {
                ["PackageReference"] = new List <IMSBuildItem>
                {
                    new MSBuildItem("PackageA", new Dictionary <string, string> {
                        ["Version"] = "2.0.0"
                    }),
                }
            });

            // Act
            List <TargetFrameworkInformation> targetFrameworkInfos = MSBuildStaticGraphRestore.GetTargetFrameworkInfos(
                new Dictionary <string, IMSBuildProject>()
            {
                { string.Empty, project }
            },
                isCpvmEnabled: false);

            // Assert
            targetFrameworkInfos.Should().HaveCount(1);
            TargetFrameworkInformation targetFrameworkInformation = targetFrameworkInfos.Single(f => f.TargetAlias == key);

            targetFrameworkInformation.Dependencies.Should().HaveCount(1);
            targetFrameworkInformation.Dependencies.Single().Name.Should().Be("PackageA");
            targetFrameworkInformation.Dependencies.Single().LibraryRange.VersionRange.OriginalString.Should().Be("2.0.0");
            targetFrameworkInformation.FrameworkName.GetShortFolderName().Should().Be("uap10.1608.1");
            targetFrameworkInformation.AssetTargetFallback.Should().BeFalse();
        }
        public void GetRestoreOutputPath_WhenOutputPathOrMSBuildProjectExtensionsPathSpecified_CorrectPathDetected(string restoreOutputPath, string msbuildProjectExtensionsPath, string expected)
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var project = new MockMSBuildProject(testDirectory, new Dictionary <string, string>
                {
                    ["RestoreOutputPath"]            = restoreOutputPath,
                    ["MSBuildProjectExtensionsPath"] = msbuildProjectExtensionsPath
                });

                var actual = MSBuildStaticGraphRestore.GetRestoreOutputPath(project);

                expected = Path.Combine(testDirectory, expected);

                actual.Should().Be(expected);
            }
        }
        public void GetProjectTargetFrameworks_WhenLegacyCsproj_CorrectTargetFrameworkDetected()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var project = new MockMSBuildProject(testDirectory, new Dictionary <string, string>
                {
                    ["TargetFrameworkMoniker"] = ".NETFramework,Version=v4.6.1"
                });

                var innerNodes = new Dictionary <string, IMSBuildProject>();

                var actual = MSBuildStaticGraphRestore.GetProjectTargetFrameworks(project, innerNodes)
                             .Should().ContainSingle();

                actual.Subject.Key.Should().Be(string.Empty);
                actual.Subject.Value.FullPath.Should().Be(project.FullPath);
            }
        }
        public void GetFrameworkReferences_WhenDuplicatesExist_DuplicatesIgnored()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var project = new MockMSBuildProject(testDirectory)
                {
                    Items = new Dictionary <string, IList <IMSBuildItem> >
                    {
                        ["FrameworkReference"] = new List <IMSBuildItem>
                        {
                            new MSBuildItem("FrameworkA", new Dictionary <string, string> {
                                ["PrivateAssets"] = $"{FrameworkDependencyFlags.None}"
                            }),
                            new MSBuildItem("FrameworkA", new Dictionary <string, string> {
                                ["PrivateAssets"] = $"{FrameworkDependencyFlags.All}"
                            }),
                            new MSBuildItem("FrameworkB", new Dictionary <string, string> {
                                ["PrivateAssets"] = $"{FrameworkDependencyFlags.All}"
                            }),
                            new MSBuildItem("FrameworkC", new Dictionary <string, string> {
                                ["PrivateAssets"] = $"{FrameworkDependencyFlags.None}"
                            }),
                            new MSBuildItem("FrameworkD", new Dictionary <string, string> {
                                ["PrivateAssets"] = "Invalid"
                            }),
                            new MSBuildItem("FrameworkE", new Dictionary <string, string>())
                        }
                    }
                };

                var actual = MSBuildStaticGraphRestore.GetFrameworkReferences(project);

                actual.ShouldBeEquivalentTo(new List <FrameworkDependency>
                {
                    new FrameworkDependency("FrameworkA", FrameworkDependencyFlags.None),
                    new FrameworkDependency("FrameworkB", FrameworkDependencyFlags.All),
                    new FrameworkDependency("FrameworkC", FrameworkDependencyFlags.None),
                    new FrameworkDependency("FrameworkD", FrameworkDependencyFlags.None),
                    new FrameworkDependency("FrameworkE", FrameworkDependencyFlags.None)
                });
            }
        }
        public void GetProjectTargetFrameworks_WhenSingleTargetFramework_CorrectTargetFrameworkDetected()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var project = new MockMSBuildProject(testDirectory, new Dictionary <string, string>
                {
                    ["TargetFramework"] = "net45",
                });

                var innerNodes = new Dictionary <string, IMSBuildProject>
                {
                    ["net45"]          = new MockMSBuildProject("Project-net45"),
                    ["net46"]          = new MockMSBuildProject("Project-net46"),
                    ["netstandard2.0"] = new MockMSBuildProject("Project-netstandard2.0"),
                };

                var actual = MSBuildStaticGraphRestore.GetProjectTargetFrameworks(project, innerNodes);

                actual.Should().ContainSingle()
                .Which.Value.FullPath.Should().Be("Project-net45");
            }
        }
        public void GetSources_WhenPerTargetFrameworkSources_CorrectSourcesDetected()
        {
            var project = new MockMSBuildProject(new Dictionary <string, string>
            {
                ["RestoreSources"] = "https://source1",
            });

            var projectsByTargetFramework = new List <IMSBuildProject>
            {
                new MockMSBuildProject(new Dictionary <string, string>
                {
                    ["RestoreAdditionalProjectSources"] = "https://source2",
                }),
                new MockMSBuildProject(new Dictionary <string, string>
                {
                    ["RestoreAdditionalProjectSources"] = "https://source3;https://source4",
                }),
            };

            var settings = new MockSettings
            {
                Sections = new List <SettingSection>
                {
                    new MockSettingSection(ConfigurationConstants.PackageSources,
                                           new AddItem("source4", "https://source2"))
                }
            };

            var actual = MSBuildStaticGraphRestore.GetSources(project, projectsByTargetFramework, settings);

            actual.ShouldBeEquivalentTo(new[]
            {
                new PackageSource("https://source1"),
                new PackageSource("https://source2"),
                new PackageSource("https://source3"),
                new PackageSource("https://source4"),
            });
        }
        public void GetPackagesPath_WhenPathOrOverrideSpecified_PathIsCorrect(string packagesPathOverride, string packagesPath, string globalPackagesFolder, string expected)
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var project = new MockMSBuildProject(testDirectory, new Dictionary <string, string>
                {
                    ["RestorePackagesPathOverride"] = packagesPathOverride,
                    ["RestorePackagesPath"]         = packagesPath
                });

                var settings = new MockSettings
                {
                    Sections = new[]
                    {
                        new MockSettingSection(ConfigurationConstants.Config, new AddItem(ConfigurationConstants.GlobalPackagesFolder, Path.Combine(testDirectory, globalPackagesFolder)))
                    }
                };

                var actual = MSBuildStaticGraphRestore.GetPackagesPath(project, settings);

                actual.Should().Be(Path.Combine(testDirectory, expected));
            }
        }
        public void GetSources_WhenRestoreSourcesAndRestoreSourcesOverrideSpecified_CorrectSourcesDetected()
        {
            var project = new MockMSBuildProject(new Dictionary <string, string>
            {
                ["RestoreSources"]         = "https://source1;https://source2",
                ["RestoreSourcesOverride"] = "https://source3"
            });

            var settings = new MockSettings
            {
                Sections = new List <SettingSection>
                {
                    new MockSettingSection(ConfigurationConstants.PackageSources,
                                           new AddItem("source4", "https://source4"))
                }
            };

            var actual = MSBuildStaticGraphRestore.GetSources(project, new[] { project }, settings);

            actual.ShouldBeEquivalentTo(new[]
            {
                new PackageSource("https://source3"),
            });
        }
        public void GetProjectRestoreMetadataFrameworkInfos_WhenProjectReferenceSpecified_CorrectTargetFrameworkDetected()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var projectA = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectA", "ProjectA.csproj"));
                var projectB = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectB", "ProjectB.csproj"));

                var projects = new Dictionary <NuGetFramework, IMSBuildProject>
                {
                    [FrameworkConstants.CommonFrameworks.Net45] = new MockMSBuildProject(testDirectory)
                    {
                        Items = new Dictionary <string, IList <IMSBuildItem> >
                        {
                            ["ProjectReference"] = new List <IMSBuildItem>
                            {
                                new MSBuildItem(@"ProjectA\ProjectA.csproj", new Dictionary <string, string> {
                                    ["FullPath"] = projectA.FullPath
                                }),
                                new MSBuildItem(@"ProjectB\ProjectB.csproj", new Dictionary <string, string> {
                                    ["FullPath"] = projectB.FullPath
                                }),
                            }
                        }
                    },
                    [FrameworkConstants.CommonFrameworks.NetStandard20] = new MockMSBuildProject(testDirectory)
                    {
                        Items = new Dictionary <string, IList <IMSBuildItem> >
                        {
                            ["ProjectReference"] = new List <IMSBuildItem>
                            {
                                new MSBuildItem(@"ProjectA\ProjectA.csproj", new Dictionary <string, string> {
                                    ["FullPath"] = projectA.FullPath
                                }),
                            }
                        }
                    }
                };

                var actual = MSBuildStaticGraphRestore.GetProjectRestoreMetadataFrameworkInfos(projects);

                actual.ShouldBeEquivalentTo(new[]
                {
                    new ProjectRestoreMetadataFrameworkInfo(FrameworkConstants.CommonFrameworks.Net45)
                    {
                        ProjectReferences = new List <ProjectRestoreReference>
                        {
                            new ProjectRestoreReference
                            {
                                ProjectPath       = projectA.FullPath,
                                ProjectUniqueName = projectA.FullPath
                            },
                            new ProjectRestoreReference
                            {
                                ProjectPath       = projectB.FullPath,
                                ProjectUniqueName = projectB.FullPath
                            }
                        }
                    },
                    new ProjectRestoreMetadataFrameworkInfo(FrameworkConstants.CommonFrameworks.NetStandard20)
                    {
                        ProjectReferences = new List <ProjectRestoreReference>
                        {
                            new ProjectRestoreReference
                            {
                                ProjectPath       = projectA.FullPath,
                                ProjectUniqueName = projectA.FullPath
                            }
                        }
                    }
                });
            }
        }
        public void GetProjectReferences_WhenDuplicateExistsOrMetadataSpecified_DuplicatesIgnoredAndMetadataReadCorrectly()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var projectA = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectA", "ProjectA.csproj"));
                var projectB = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectB", "ProjectB.csproj"));
                var projectC = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectC", "ProjectC.csproj"));
                var projectD = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectD", "ProjectD.csproj"));

                var project = new MockMSBuildProject(testDirectory)
                {
                    Items = new Dictionary <string, IList <IMSBuildItem> >
                    {
                        ["ProjectReference"] = new List <IMSBuildItem>
                        {
                            new MSBuildItem(@"ProjectA\ProjectA.csproj", new Dictionary <string, string> {
                                ["FullPath"] = projectA.FullPath
                            }),
                            new MSBuildItem(@"ProjectA\ProjectA.csproj", new Dictionary <string, string> {
                                ["FullPath"] = "ShouldBeDeduped"
                            }),
                            new MSBuildItem(@"ProjectB\ProjectB.csproj", new Dictionary <string, string> {
                                ["FullPath"] = projectB.FullPath, ["ExcludeAssets"] = $"{LibraryIncludeFlags.Compile};{LibraryIncludeFlags.Runtime}"
                            }),
                            new MSBuildItem(@"ProjectC\ProjectC.csproj", new Dictionary <string, string> {
                                ["FullPath"] = projectC.FullPath, ["IncludeAssets"] = $"{LibraryIncludeFlags.Build};{LibraryIncludeFlags.BuildTransitive}"
                            }),
                            new MSBuildItem(@"ProjectD\ProjectD.csproj", new Dictionary <string, string> {
                                ["FullPath"] = projectD.FullPath, ["PrivateAssets"] = $"{LibraryIncludeFlags.Runtime};{LibraryIncludeFlags.ContentFiles}"
                            }),
                            new MSBuildItem(@"ProjectE\ProjectE.csproj", new Dictionary <string, string> {
                                ["ReferenceOutputAssembly"] = bool.FalseString
                            }),
                        }
                    }
                };

                var actual = MSBuildStaticGraphRestore.GetProjectReferences(project);

                actual.ShouldBeEquivalentTo(new[]
                {
                    new ProjectRestoreReference
                    {
                        ProjectPath       = projectA.FullPath,
                        ProjectUniqueName = projectA.FullPath
                    },
                    new ProjectRestoreReference
                    {
                        ProjectPath       = projectB.FullPath,
                        ProjectUniqueName = projectB.FullPath,
                        ExcludeAssets     = LibraryIncludeFlags.Runtime | LibraryIncludeFlags.Compile
                    },
                    new ProjectRestoreReference
                    {
                        ProjectPath       = projectC.FullPath,
                        ProjectUniqueName = projectC.FullPath,
                        IncludeAssets     = LibraryIncludeFlags.Build | LibraryIncludeFlags.BuildTransitive
                    },
                    new ProjectRestoreReference
                    {
                        ProjectPath       = projectD.FullPath,
                        ProjectUniqueName = projectD.FullPath,
                        PrivateAssets     = LibraryIncludeFlags.Runtime | LibraryIncludeFlags.ContentFiles
                    }
                });
            }
        }
        public void GetPackageReferences_WhenDuplicatesOrMetadataSpecified_DuplicatesIgnoredAndMetadataReadCorrectly()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var project = new MockMSBuildProject(testDirectory)
                {
                    Items = new Dictionary <string, IList <IMSBuildItem> >
                    {
                        ["PackageReference"] = new List <IMSBuildItem>
                        {
                            new MSBuildItem("PackageA", new Dictionary <string, string> {
                                ["Version"] = "1.1.1"
                            }),
                            new MSBuildItem("PackageA", new Dictionary <string, string> {
                                ["Version"] = "2.0.0"
                            }),
                            new MSBuildItem("PackageB", new Dictionary <string, string> {
                                ["Version"] = "1.2.3", ["IsImplicitlyDefined"] = bool.TrueString
                            }),
                            new MSBuildItem("PackageC", new Dictionary <string, string> {
                                ["Version"] = "4.5.6", ["GeneratePathProperty"] = bool.TrueString
                            }),
                            new MSBuildItem("PackageD", new Dictionary <string, string> {
                                ["Version"] = "1.2.3", ["IncludeAssets"] = $"{LibraryIncludeFlags.Build};{LibraryIncludeFlags.Analyzers}"
                            }),
                            new MSBuildItem("PackageE", new Dictionary <string, string> {
                                ["Version"] = "1.2.3", ["PrivateAssets"] = $"{LibraryIncludeFlags.Runtime};{LibraryIncludeFlags.Compile}"
                            }),
                            new MSBuildItem("PackageF", new Dictionary <string, string> {
                                ["Version"] = "1.2.3", ["ExcludeAssets"] = $"{LibraryIncludeFlags.Build};{LibraryIncludeFlags.Analyzers}"
                            }),
                            new MSBuildItem("PackageG", new Dictionary <string, string> {
                                ["Version"] = "1.2.3", ["IncludeAssets"] = $"{LibraryIncludeFlags.Build};{LibraryIncludeFlags.Analyzers};{LibraryIncludeFlags.Compile}", ["ExcludeAssets"] = $"{LibraryIncludeFlags.Analyzers}"
                            }),
                            new MSBuildItem("PackageH", new Dictionary <string, string> {
                                ["Version"] = "1.2.3", ["NoWarn"] = "NU1001;\tNU1006 ; NU3017 "
                            }),
                            new MSBuildItem("PackageI", new Dictionary <string, string> {
                                ["Version"] = null
                            }),
                        }
                    }
                };

                var actual = MSBuildStaticGraphRestore.GetPackageReferences(project);

                actual.ShouldBeEquivalentTo(new List <LibraryDependency>
                {
                    new LibraryDependency
                    {
                        LibraryRange = new LibraryRange("PackageA", VersionRange.Parse("1.1.1"), LibraryDependencyTarget.Package),
                    },
                    new LibraryDependency
                    {
                        AutoReferenced = true,
                        LibraryRange   = new LibraryRange("PackageB", VersionRange.Parse("1.2.3"), LibraryDependencyTarget.Package),
                    },
                    new LibraryDependency
                    {
                        GeneratePathProperty = true,
                        LibraryRange         = new LibraryRange("PackageC", VersionRange.Parse("4.5.6"), LibraryDependencyTarget.Package),
                    },
                    new LibraryDependency
                    {
                        IncludeType  = LibraryIncludeFlags.Build | LibraryIncludeFlags.Analyzers,
                        LibraryRange = new LibraryRange("PackageD", VersionRange.Parse("1.2.3"), LibraryDependencyTarget.Package),
                    },
                    new LibraryDependency
                    {
                        SuppressParent = LibraryIncludeFlags.Runtime | LibraryIncludeFlags.Compile,
                        LibraryRange   = new LibraryRange("PackageE", VersionRange.Parse("1.2.3"), LibraryDependencyTarget.Package),
                    },
                    new LibraryDependency
                    {
                        IncludeType  = LibraryIncludeFlags.Runtime | LibraryIncludeFlags.Compile | LibraryIncludeFlags.Native | LibraryIncludeFlags.ContentFiles | LibraryIncludeFlags.BuildTransitive,
                        LibraryRange = new LibraryRange("PackageF", VersionRange.Parse("1.2.3"), LibraryDependencyTarget.Package),
                    },
                    new LibraryDependency
                    {
                        IncludeType  = LibraryIncludeFlags.Compile | LibraryIncludeFlags.Build,
                        LibraryRange = new LibraryRange("PackageG", VersionRange.Parse("1.2.3"), LibraryDependencyTarget.Package),
                    },
                    new LibraryDependency
                    {
                        LibraryRange = new LibraryRange("PackageH", VersionRange.Parse("1.2.3"), LibraryDependencyTarget.Package),
                        NoWarn       = new List <NuGetLogCode> {
                            NuGetLogCode.NU1001, NuGetLogCode.NU1006, NuGetLogCode.NU3017
                        }
                    },
                    new LibraryDependency
                    {
                        LibraryRange = new LibraryRange("PackageI", VersionRange.All, LibraryDependencyTarget.Package),
                    }
                });
            }
        }
        public void GetProjectRestoreMetadataFrameworkInfos_WhenProjectReferenceSpecified_UsesFrameworkFromTargetFrameworkInformation()
        {
            using (var testDirectory = TestDirectory.Create())
            {
                var projectA           = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectA", "ProjectA.csproj"));
                var projectB           = new MockMSBuildProject(Path.Combine(testDirectory, "ProjectB", "ProjectB.csproj"));
                var net45Alias         = "net45";
                var netstandard20Alias = "netstandard2.0";

                var projects = new Dictionary <string, IMSBuildProject>
                {
                    [net45Alias] = new MockMSBuildProject(testDirectory)
                    {
                        Items = new Dictionary <string, IList <IMSBuildItem> >
                        {
                            ["ProjectReference"] = new List <IMSBuildItem>
                            {
                                new MSBuildItem(@"ProjectA\ProjectA.csproj", new Dictionary <string, string> {
                                    ["FullPath"] = projectA.FullPath
                                }),
                                new MSBuildItem(@"ProjectB\ProjectB.csproj", new Dictionary <string, string> {
                                    ["FullPath"] = projectB.FullPath
                                }),
                            }
                        }
                    },
                    [netstandard20Alias] = new MockMSBuildProject(testDirectory)
                    {
                        Items = new Dictionary <string, IList <IMSBuildItem> >
                        {
                            ["ProjectReference"] = new List <IMSBuildItem>
                            {
                                new MSBuildItem(@"ProjectA\ProjectA.csproj", new Dictionary <string, string> {
                                    ["FullPath"] = projectA.FullPath
                                }),
                            }
                        }
                    }
                };

                var targetFrameworkInfos = new List <TargetFrameworkInformation>();
                targetFrameworkInfos.Add(new TargetFrameworkInformation {
                    TargetAlias = net45Alias, FrameworkName = FrameworkConstants.CommonFrameworks.Net45
                });
                targetFrameworkInfos.Add(new TargetFrameworkInformation {
                    TargetAlias = netstandard20Alias, FrameworkName = FrameworkConstants.CommonFrameworks.NetStandard20
                });

                var actual = MSBuildStaticGraphRestore.GetProjectRestoreMetadataFrameworkInfos(targetFrameworkInfos, projects);

                actual.ShouldBeEquivalentTo(new[]
                {
                    new ProjectRestoreMetadataFrameworkInfo(FrameworkConstants.CommonFrameworks.Net45)
                    {
                        TargetAlias       = net45Alias,
                        ProjectReferences = new List <ProjectRestoreReference>
                        {
                            new ProjectRestoreReference
                            {
                                ProjectPath       = projectA.FullPath,
                                ProjectUniqueName = projectA.FullPath
                            },
                            new ProjectRestoreReference
                            {
                                ProjectPath       = projectB.FullPath,
                                ProjectUniqueName = projectB.FullPath
                            }
                        }
                    },
                    new ProjectRestoreMetadataFrameworkInfo(FrameworkConstants.CommonFrameworks.NetStandard20)
                    {
                        TargetAlias       = netstandard20Alias,
                        ProjectReferences = new List <ProjectRestoreReference>
                        {
                            new ProjectRestoreReference
                            {
                                ProjectPath       = projectA.FullPath,
                                ProjectUniqueName = projectA.FullPath
                            }
                        }
                    }
                });
            }
        }