public void DependencyGraphSpec_RoundTripMSBuildMetadata_ProjectReferenceFlags() { // Arrange var frameworks = new List <TargetFrameworkInformation>(); frameworks.Add(new TargetFrameworkInformation() { FrameworkName = NuGetFramework.Parse("net45") }); var spec = new PackageSpec(frameworks); var msbuildMetadata = new ProjectRestoreMetadata(); spec.RestoreMetadata = msbuildMetadata; msbuildMetadata.ProjectUniqueName = "A55205E7-4D08-4672-8011-0925467CC45F"; msbuildMetadata.ProjectPath = "c:\\x\\x.csproj"; msbuildMetadata.ProjectName = PackageSpecName; msbuildMetadata.ProjectStyle = ProjectStyle.PackageReference; var tfmGroup = new ProjectRestoreMetadataFrameworkInfo(NuGetFramework.Parse("net45")); var tfmGroup2 = new ProjectRestoreMetadataFrameworkInfo(NuGetFramework.Parse("netstandard1.3")); msbuildMetadata.TargetFrameworks.Add(tfmGroup); msbuildMetadata.TargetFrameworks.Add(tfmGroup2); var ref1 = new ProjectRestoreReference() { ProjectUniqueName = "44B29B8D-8413-42D2-8DF4-72225659619B", ProjectPath = "c:\\a\\a.csproj", IncludeAssets = LibraryIncludeFlags.Build, ExcludeAssets = LibraryIncludeFlags.Compile, PrivateAssets = LibraryIncludeFlags.Runtime }; var ref2 = new ProjectRestoreReference() { ProjectUniqueName = "78A6AD3F-9FA5-47F6-A54E-84B46A48CB2F", ProjectPath = "c:\\b\\b.csproj" }; tfmGroup.ProjectReferences.Add(ref1); tfmGroup.ProjectReferences.Add(ref2); tfmGroup2.ProjectReferences.Add(ref1); tfmGroup2.ProjectReferences.Add(ref2); // Act PackageSpec readSpec = PackageSpecTestUtility.RoundTrip(spec, PackageSpecName, PackageSpecPath); // Assert Assert.Equal(2, readSpec.RestoreMetadata.TargetFrameworks.Count); foreach (var framework in readSpec.RestoreMetadata.TargetFrameworks) { var references = framework.ProjectReferences.OrderBy(e => e.ProjectUniqueName).ToArray(); Assert.Equal("44B29B8D-8413-42D2-8DF4-72225659619B", references[0].ProjectUniqueName); Assert.Equal(LibraryIncludeFlags.Build, references[0].IncludeAssets); Assert.Equal(LibraryIncludeFlags.Compile, references[0].ExcludeAssets); Assert.Equal(LibraryIncludeFlags.Runtime, references[0].PrivateAssets); Assert.Equal("78A6AD3F-9FA5-47F6-A54E-84B46A48CB2F", references[1].ProjectUniqueName); Assert.Equal(LibraryIncludeFlags.All, references[1].IncludeAssets); Assert.Equal(LibraryIncludeFlags.None, references[1].ExcludeAssets); Assert.Equal(LibraryIncludeFlagUtils.DefaultSuppressParent, references[1].PrivateAssets); } }
public void DependencyGraphSpec_RoundTripMSBuildMetadata() { // Arrange var frameworks = new List <TargetFrameworkInformation>(); frameworks.Add(new TargetFrameworkInformation() { FrameworkName = NuGetFramework.Parse("net45") }); var spec = new PackageSpec(frameworks); spec.Version = NuGetVersion.Parse("24.5.1.2-alpha.1.2+a.b.c"); var msbuildMetadata = new ProjectRestoreMetadata(); spec.RestoreMetadata = msbuildMetadata; msbuildMetadata.ProjectUniqueName = "A55205E7-4D08-4672-8011-0925467CC45F"; msbuildMetadata.ProjectPath = "c:\\x\\x.csproj"; msbuildMetadata.ProjectName = PackageSpecName; msbuildMetadata.ProjectJsonPath = "c:\\x\\project.json"; msbuildMetadata.ProjectStyle = ProjectStyle.PackageReference; msbuildMetadata.PackagesPath = "c:\\packages"; msbuildMetadata.Sources = new[] { new PackageSource("https://api.nuget.org/v3/index.json") }; var tfmGroup = new ProjectRestoreMetadataFrameworkInfo(NuGetFramework.Parse("net45")); msbuildMetadata.TargetFrameworks.Add(tfmGroup); tfmGroup.ProjectReferences.Add(new ProjectRestoreReference() { ProjectUniqueName = "44B29B8D-8413-42D2-8DF4-72225659619B", ProjectPath = "c:\\a\\a.csproj" }); tfmGroup.ProjectReferences.Add(new ProjectRestoreReference() { ProjectUniqueName = "78A6AD3F-9FA5-47F6-A54E-84B46A48CB2F", ProjectPath = "c:\\b\\b.csproj" }); msbuildMetadata.FallbackFolders.Add("c:\\fallback1"); msbuildMetadata.FallbackFolders.Add("c:\\fallback2"); msbuildMetadata.ConfigFilePaths.Add("c:\\nuget.config"); msbuildMetadata.ConfigFilePaths.Add("d:\\nuget.config"); msbuildMetadata.CrossTargeting = true; msbuildMetadata.LegacyPackagesDirectory = true; // Act PackageSpec readSpec = PackageSpecTestUtility.RoundTrip(spec, PackageSpecName, PackageSpecPath); ProjectRestoreMetadata msbuildMetadata2 = readSpec.RestoreMetadata; // Assert Assert.NotNull(msbuildMetadata2); Assert.Equal("A55205E7-4D08-4672-8011-0925467CC45F", msbuildMetadata2.ProjectUniqueName); Assert.Equal("c:\\x\\x.csproj", msbuildMetadata2.ProjectPath); Assert.Equal(PackageSpecName, msbuildMetadata2.ProjectName); Assert.Equal("c:\\x\\project.json", msbuildMetadata2.ProjectJsonPath); Assert.Equal(ProjectStyle.PackageReference, msbuildMetadata2.ProjectStyle); Assert.Equal("c:\\packages", msbuildMetadata2.PackagesPath); Assert.Equal("https://api.nuget.org/v3/index.json", string.Join("|", msbuildMetadata.Sources.Select(s => s.Source))); Assert.Equal("c:\\fallback1|c:\\fallback2", string.Join("|", msbuildMetadata2.FallbackFolders)); Assert.Equal("c:\\nuget.config|d:\\nuget.config", string.Join("|", msbuildMetadata.ConfigFilePaths)); Assert.Equal("44B29B8D-8413-42D2-8DF4-72225659619B|c:\\a\\a.csproj|78A6AD3F-9FA5-47F6-A54E-84B46A48CB2F|c:\\b\\b.csproj", string.Join("|", msbuildMetadata2.TargetFrameworks.Single().ProjectReferences.Select(e => $"{e.ProjectUniqueName}|{e.ProjectPath}"))); Assert.True(msbuildMetadata.CrossTargeting); Assert.True(msbuildMetadata.LegacyPackagesDirectory); // Verify build metadata is not lost. Assert.Equal("24.5.1.2-alpha.1.2+a.b.c", readSpec.Version.ToFullString()); }
public async Task <IReadOnlyList <PackageSpec> > GetPackageSpecsAsync(DependencyGraphCacheContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } // Some projects like website project don't have project file. // Return empty list for this case. if (string.IsNullOrEmpty(ProjectSystem.ProjectFileFullPath)) { return(new List <PackageSpec>()); } PackageSpec packageSpec = null; if (!context.PackageSpecCache.TryGetValue(ProjectSystem.ProjectFileFullPath, out packageSpec)) { packageSpec = new PackageSpec(new List <TargetFrameworkInformation> { new TargetFrameworkInformation { FrameworkName = ProjectSystem.TargetFramework } }); packageSpec.Name = ProjectSystem.ProjectName; packageSpec.FilePath = ProjectSystem.ProjectFileFullPath; // A packages.config project does not follow the typical restore flow so there is no need to add package // dependencides to the package spec. Packages.config package restoration is done elsewhere. var metadata = new ProjectRestoreMetadata(); packageSpec.RestoreMetadata = metadata; metadata.ProjectStyle = ProjectStyle.Unknown; metadata.ProjectPath = ProjectSystem.ProjectFileFullPath; metadata.ProjectName = ProjectSystem.ProjectName; metadata.ProjectUniqueName = ProjectSystem.ProjectFileFullPath; var references = (await ProjectServices .ReferencesReader .GetProjectReferencesAsync(context.Logger, CancellationToken.None)) .ToList(); if (references != null && references.Count > 0) { // Add framework group var frameworkGroup = new ProjectRestoreMetadataFrameworkInfo(ProjectSystem.TargetFramework); metadata.TargetFrameworks.Add(frameworkGroup); foreach (var reference in references) { // This reference applies to all frameworks // Include/exclude flags are not possible for this project type frameworkGroup.ProjectReferences.Add(reference); } } context.PackageSpecCache.Add(MSBuildProjectPath, packageSpec); } return(new[] { packageSpec }); }
private ProjectRestoreMetadata CreateProjectRestoreMetadata() { var projectReference = new ProjectRestoreReference(); projectReference.ProjectPath = "Path"; projectReference.ProjectUniqueName = "ProjectUniqueName"; projectReference.IncludeAssets = LibraryIncludeFlags.All; projectReference.ExcludeAssets = LibraryIncludeFlags.Analyzers; projectReference.PrivateAssets = LibraryIncludeFlags.Build; var nugetFramework = NuGetFramework.Parse("net461"); var originalPRMFI = new ProjectRestoreMetadataFrameworkInfo(nugetFramework); originalPRMFI.ProjectReferences = new List <ProjectRestoreReference>() { projectReference }; var targetframeworks = new List <ProjectRestoreMetadataFrameworkInfo>() { originalPRMFI }; var allWarningsAsErrors = true; var noWarn = new HashSet <NuGetLogCode>() { NuGetLogCode.NU1000, NuGetLogCode.NU1500 }; var warningsAsErrors = new HashSet <NuGetLogCode>() { NuGetLogCode.NU1001, NuGetLogCode.NU1501 }; var warningProperties = new WarningProperties(allWarningsAsErrors: allWarningsAsErrors, warningsAsErrors: warningsAsErrors, noWarn: noWarn); var originalProjectRestoreMetadata = new ProjectRestoreMetadata(); originalProjectRestoreMetadata.ProjectStyle = ProjectStyle.PackageReference; originalProjectRestoreMetadata.ProjectPath = "ProjectPath"; originalProjectRestoreMetadata.ProjectJsonPath = "ProjectJsonPath"; originalProjectRestoreMetadata.OutputPath = "OutputPath"; originalProjectRestoreMetadata.ProjectName = "ProjectName"; originalProjectRestoreMetadata.ProjectUniqueName = "ProjectUniqueName"; originalProjectRestoreMetadata.PackagesPath = "PackagesPath"; originalProjectRestoreMetadata.CacheFilePath = "CacheFilePath"; originalProjectRestoreMetadata.CrossTargeting = true; originalProjectRestoreMetadata.LegacyPackagesDirectory = true; originalProjectRestoreMetadata.ValidateRuntimeAssets = true; originalProjectRestoreMetadata.SkipContentFileWrite = true; originalProjectRestoreMetadata.TargetFrameworks = targetframeworks; originalProjectRestoreMetadata.Sources = new List <PackageSource>() { new PackageSource("http://api.nuget.org/v3/index.json") };; originalProjectRestoreMetadata.FallbackFolders = new List <string>() { "fallback1" }; originalProjectRestoreMetadata.ConfigFilePaths = new List <string>() { "config1" }; originalProjectRestoreMetadata.OriginalTargetFrameworks = new List <string>() { "net45" }; originalProjectRestoreMetadata.Files = new List <ProjectRestoreMetadataFile>() { new ProjectRestoreMetadataFile("packagePath", "absolutePath") }; originalProjectRestoreMetadata.ProjectWideWarningProperties = warningProperties; return(originalProjectRestoreMetadata); }
private ProjectRestoreMetadata CreateProjectRestoreMetadata() { var projectReference = new ProjectRestoreReference { ProjectPath = "Path", ProjectUniqueName = "ProjectUniqueName", IncludeAssets = LibraryIncludeFlags.All, ExcludeAssets = LibraryIncludeFlags.Analyzers, PrivateAssets = LibraryIncludeFlags.Build }; var nugetFramework = NuGetFramework.Parse("net461"); var originalPRMFI = new ProjectRestoreMetadataFrameworkInfo(nugetFramework) { ProjectReferences = new List <ProjectRestoreReference>() { projectReference } }; var targetframeworks = new List <ProjectRestoreMetadataFrameworkInfo>() { originalPRMFI }; var allWarningsAsErrors = true; var noWarn = new HashSet <NuGetLogCode>() { NuGetLogCode.NU1000, NuGetLogCode.NU1500 }; var warningsAsErrors = new HashSet <NuGetLogCode>() { NuGetLogCode.NU1001, NuGetLogCode.NU1501 }; var warningProperties = new WarningProperties(allWarningsAsErrors: allWarningsAsErrors, warningsAsErrors: warningsAsErrors, noWarn: noWarn); var restoreLockProperties = new RestoreLockProperties(restorePackagesWithLockFile: "true", nuGetLockFilePath: null, restoreLockedMode: false); var originalProjectRestoreMetadata = new ProjectRestoreMetadata { ProjectStyle = ProjectStyle.PackageReference, ProjectPath = "ProjectPath", ProjectJsonPath = "ProjectJsonPath", OutputPath = "OutputPath", ProjectName = "ProjectName", ProjectUniqueName = "ProjectUniqueName", PackagesPath = "PackagesPath", CacheFilePath = "CacheFilePath", CrossTargeting = true, LegacyPackagesDirectory = true, ValidateRuntimeAssets = true, SkipContentFileWrite = true, TargetFrameworks = targetframeworks, Sources = new List <PackageSource>() { new PackageSource("http://api.nuget.org/v3/index.json") }, FallbackFolders = new List <string>() { "fallback1" }, ConfigFilePaths = new List <string>() { "config1" }, OriginalTargetFrameworks = new List <string>() { "net45" }, Files = new List <ProjectRestoreMetadataFile>() { new ProjectRestoreMetadataFile("packagePath", "absolutePath") }, ProjectWideWarningProperties = warningProperties, RestoreLockProperties = restoreLockProperties }; return(originalProjectRestoreMetadata); }