Пример #1
0
        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);
            }
        }
Пример #2
0
        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 });
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }