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); }
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 } } } }); } }