示例#1
0
        public void CanAddDependenciesToMultipleGroups()
        {
            PackageRepository.Create(TestRootPath)
            .Package("PackageA", "1.0.0", out PackageIdentity package)
            .Dependency("PackageB", "1.0.0", "net45")
            .Dependency("PackageB", "1.0.0", "net46")
            .Dependency("PackageB", "1.0.0", "netstandard2.0");

            ValidatePackageDependencies(
                package,
                new List <PackageDependencyGroup>
            {
                new PackageDependencyGroup(
                    FrameworkConstants.CommonFrameworks.Net45,
                    new List <PackageDependency>
                {
                    new PackageDependency("PackageB", VersionRange.Parse("1.0.0")),
                }),
                new PackageDependencyGroup(
                    FrameworkConstants.CommonFrameworks.Net46,
                    new List <PackageDependency>
                {
                    new PackageDependency("PackageB", VersionRange.Parse("1.0.0")),
                }),
                new PackageDependencyGroup(
                    FrameworkConstants.CommonFrameworks.NetStandard20,
                    new List <PackageDependency>
                {
                    new PackageDependency("PackageB", VersionRange.Parse("1.0.0")),
                }),
            });
        }
 public void CanAddDependenciesToMultipleGroups()
 {
     using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                  .Package("PackageA", "1.0.0", out Package package)
                                                  .Dependency("PackageB", "1.0.0", "net45")
                                                  .Dependency("PackageB", "1.0.0", "net46")
                                                  .Dependency("PackageB", "1.0.0", "netstandard2.0"))
     {
         ValidatePackageDependencies(
             packageRepository,
             package,
             new List <(string TargetFramework, IEnumerable <PackageDependency> Dependencies)>
         {
             (
                 "net45",
                 new List <PackageDependency>
             {
                 new PackageDependency("PackageB", "1.0.0", "Build, Analyzers"),
             }),
             (
                 "net46",
                 new List <PackageDependency>
             {
                 new PackageDependency("PackageB", "1.0.0", "Build, Analyzers"),
             }),
             (
                 "netstandard2.0",
                 new List <PackageDependency>
             {
                 new PackageDependency("PackageB", "1.0.0", "Build, Analyzers"),
             }),
         });
示例#3
0
        public void CanUseNuGetSdkResolver()
        {
            using (ProjectCollection projectCollection = new ProjectCollection())
            {
                BuildOutput buildOutput = BuildOutput.Create();

                projectCollection.RegisterLogger(buildOutput);

                using (PackageRepository.Create(TestRootPath)
                       .Package("Foo.Bar", "1.2.3", out Package package)
                       .FileText(Path.Combine("Sdk", "Sdk.props"), "<Project />")
                       .FileText(Path.Combine("Sdk", "Sdk.targets"), "<Project />"))
                {
                    ProjectCreator projectCreator = ProjectCreator
                                                    .Create(
                        sdk: $"{package.Id}/{package.Version}",
                        projectCollection: projectCollection)
                                                    .Save(GetTempFileName(".csproj"));

                    try
                    {
                        Project unused = projectCreator.Project;
                    }
                    catch (Exception e)
                    {
                        throw new Exception(buildOutput.GetConsoleLog(), e);
                    }
                }
            }
        }
示例#4
0
        private static void Main(string[] args)
        {
            var packagesRepository = new PackageRepository();

            Parser.Default
            .ParseArguments <Options>(args)
            .WithParsed(o =>
            {
                foreach (var package in FilesScanner.GetAllPackages(new [] { o.RepositoryPath }, false))
                {
                    packagesRepository.AddPackage(package);
                }

                var localPackages      = FilesScanner.GetAllPackages(new [] { o.Path }, true);
                var structureValidator = new StructureValidator();

                var validationErrors = structureValidator.ValidateStructure(localPackages);
                foreach (var validationError in structureValidator.ValidateStructure(localPackages))
                {
                    Console.WriteLine(validationError);
                }

                if (validationErrors.Any())
                {
                    return;
                }

                HandleVersionSynchronization(localPackages);
                HandleCycles(FilesScanner.GetAllPackages(new [] { o.Path }, true), packagesRepository, o.Target);

                localPackages        = FilesScanner.GetAllPackages(new [] { o.Path }, true);
                var resolvedPackages = ResolvePackages(PackageRepository.Create(localPackages), packagesRepository, o.Target);
                Run(resolvedPackages);
            });
        }
示例#5
0
        public void BasicLibrary()
        {
            PackageRepository.Create(TestRootPath)
            .Package("PackageA", "1.0.0", out PackageIdentity packageA)
            .Library(FrameworkConstants.CommonFrameworks.Net45);

            VerifyAssembly(packageA, FrameworkConstants.CommonFrameworks.Net45);
        }
 public void BasicLibrary()
 {
     using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                  .Package("PackageA", "1.0.0", out Package packageA)
                                                  .Library("net45"))
     {
         VerifyAssembly(packageRepository, packageA, "net45");
     }
 }
示例#7
0
        public void LibraryWithVersion()
        {
            const string assemblyVersion = "2.3.4.5";

            PackageRepository.Create(TestRootPath)
            .Package("PackageA", "1.0.0", out PackageIdentity packageA)
            .Library(FrameworkConstants.CommonFrameworks.Net45, assemblyVersion: assemblyVersion);

            VerifyAssembly(packageA, FrameworkConstants.CommonFrameworks.Net45, version: "2.3.4.5");
        }
示例#8
0
        public void MultipleLibrariesMultipleTargetFrameworks()
        {
            PackageRepository.Create(TestRootPath)
            .Package("PackageA", "1.0.0", out PackageIdentity packageA)
            .Library(FrameworkConstants.CommonFrameworks.Net45)
            .Library(FrameworkConstants.CommonFrameworks.NetStandard20);

            VerifyAssembly(packageA, FrameworkConstants.CommonFrameworks.Net45);
            VerifyAssembly(packageA, FrameworkConstants.CommonFrameworks.NetStandard20);
        }
示例#9
0
        public void MultipleLibrariesSameTargetFramework()
        {
            PackageRepository.Create(TestRootPath)
            .Package("PackageA", "1.0.0", out PackageIdentity packageA)
            .Library(FrameworkConstants.CommonFrameworks.Net45, filename: null)
            .Library(FrameworkConstants.CommonFrameworks.Net45, filename: "CustomAssembly.dll");

            VerifyAssembly(packageA, FrameworkConstants.CommonFrameworks.Net45);
            VerifyAssembly(packageA, FrameworkConstants.CommonFrameworks.Net45, assemblyFileName: "CustomAssembly.dll");
        }
 public void MultipleLibrariesSameTargetFramework()
 {
     using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                  .Package("PackageA", "1.0.0", out Package packageA)
                                                  .Library("net45", filename: null)
                                                  .Library("net45", filename: "CustomAssembly.dll"))
     {
         VerifyAssembly(packageRepository, packageA, "net45");
         VerifyAssembly(packageRepository, packageA, "net45", assemblyFileName: "CustomAssembly.dll");
     }
 }
 public void MultipleLibrariesMultipleTargetFrameworks()
 {
     using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                  .Package("PackageA", "1.0.0", out Package packageA)
                                                  .Library("net45")
                                                  .Library("netstandard2.0"))
     {
         VerifyAssembly(packageRepository, packageA, "net45");
         VerifyAssembly(packageRepository, packageA, "netstandard2.0");
     }
 }
        public void LibraryWithVersion()
        {
            const string assemblyVersion = "2.3.4.5";

            using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                         .Package("PackageA", "1.0.0", out Package packageA)
                                                         .Library("net45", assemblyVersion: assemblyVersion))
            {
                VerifyAssembly(packageRepository, packageA, "net45", version: "2.3.4.5");
            }
        }
示例#13
0
        public void TextFileTest()
        {
            string       relativePath = Path.Combine("test", "foo.txt");
            const string contents     = "FF6B25B727E04D9980DE3B5D7AE0FB6E";

            using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                         .Package("PackageA", "1.0.0", out Package packageA)
                                                         .FileText(relativePath, contents))
            {
                VerifyFileContents(packageRepository, packageA, relativePath, contents);
            }
        }
        public void BuildLogicRequiresPackage()
        {
            InvalidOperationException exception;

            exception = Should.Throw <InvalidOperationException>(() =>
            {
                PackageRepository.Create(TestRootPath)
                .BuildMultiTargetingProps();
            });

            exception.Message.ShouldBe(Strings.ErrorWhenAddingBuildLogicRequiresPackage);

            exception = Should.Throw <InvalidOperationException>(() =>
            {
                PackageRepository.Create(TestRootPath)
                .BuildMultiTargetingTargets();
            });

            exception.Message.ShouldBe(Strings.ErrorWhenAddingBuildLogicRequiresPackage);

            exception = Should.Throw <InvalidOperationException>(() =>
            {
                PackageRepository.Create(TestRootPath)
                .BuildTransitiveProps();
            });

            exception.Message.ShouldBe(Strings.ErrorWhenAddingBuildLogicRequiresPackage);

            exception = Should.Throw <InvalidOperationException>(() =>
            {
                PackageRepository.Create(TestRootPath)
                .BuildTransitiveTargets();
            });

            exception.Message.ShouldBe(Strings.ErrorWhenAddingBuildLogicRequiresPackage);

            exception = Should.Throw <InvalidOperationException>(() =>
            {
                PackageRepository.Create(TestRootPath)
                .BuildProps();
            });

            exception.Message.ShouldBe(Strings.ErrorWhenAddingBuildLogicRequiresPackage);

            exception = Should.Throw <InvalidOperationException>(() =>
            {
                PackageRepository.Create(TestRootPath)
                .BuildTargets();
            });

            exception.Message.ShouldBe(Strings.ErrorWhenAddingBuildLogicRequiresPackage);
        }
        public void BuildTransitiveTest()
        {
            PackageRepository.Create(TestRootPath)
            .Package("PackageA", "2.0.0")
            .BuildTransitiveProps(out ProjectCreator buildTransitivePropsProject)
            .BuildTransitiveTargets(out ProjectCreator buildTransitiveTargetsProject);

            buildTransitivePropsProject.FullPath.ShouldBe(Path.Combine(TestRootPath, ".nuget", "packages", "packagea", "2.0.0", "buildTransitive", "PackageA.props"));
            buildTransitiveTargetsProject.FullPath.ShouldBe(Path.Combine(TestRootPath, ".nuget", "packages", "packagea", "2.0.0", "buildTransitive", "PackageA.targets"));

            File.Exists(buildTransitivePropsProject.FullPath).ShouldBeTrue();
            File.Exists(buildTransitiveTargetsProject.FullPath).ShouldBeTrue();
        }
        public void BuildTransitiveTest()
        {
            PackageRepository.Create(TestRootPath)
            .Package("PackageA", "2.0")
            .BuildTransitiveProps(out ProjectCreator buildTransitivePropsProject)
            .BuildTransitiveTargets(out ProjectCreator buildTransitiveTargetsProject);

            buildTransitivePropsProject.FullPath.ShouldBe($@"{TestRootPath}\.nuget\packages\packagea\2.0.0\buildTransitive\PackageA.props");
            buildTransitiveTargetsProject.FullPath.ShouldBe($@"{TestRootPath}\.nuget\packages\packagea\2.0.0\buildTransitive\PackageA.targets");

            File.Exists(buildTransitivePropsProject.FullPath).ShouldBeTrue();
            File.Exists(buildTransitiveTargetsProject.FullPath).ShouldBeTrue();
        }
示例#17
0
        public void CustomFileTest()
        {
            string       relativePath = Path.Combine("test", "foo.txt");
            const string contents     = "798D159A4ADE45B9896EDE89FBA39C60";

            FileInfo sourceFileInfo = new FileInfo(Path.Combine(TestRootPath, "something"));

            File.WriteAllText(sourceFileInfo.FullName, contents);

            using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                         .Package("PackageA", "1.0.0", out Package packageA)
                                                         .FileCustom(relativePath, sourceFileInfo))
            {
                VerifyFileContents(packageRepository, packageA, relativePath, contents);
            }
        }
示例#18
0
        public void BuildCanConsumePackage()
        {
            using (PackageRepository.Create(TestRootPath)
                   .Package("PackageB", "1.0", out Package packageB)
                   .Library(TargetFramework)
                   .Package("PackageA", "1.0.0", out Package packageA)
                   .Dependency(packageB, TargetFramework)
                   .Library(TargetFramework))
            {
                ProjectCreator.Templates.SdkCsproj(
                    path: Path.Combine(TestRootPath, "ClassLibraryA", "ClassLibraryA.csproj"),
                    targetFramework: TargetFramework)
                .ItemPackageReference(packageA)
                .TryBuild(restore: true, out bool result, out BuildOutput buildOutput);

                result.ShouldBeTrue(buildOutput.GetConsoleLog());
            }
        }
示例#19
0
        public void BuildCanConsumePackage()
        {
            Action t = () =>
            {
                PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                      .Package("PackageB", "1.0", out PackageIdentity packageB)
                                                      .Library("net45")
                                                      .Package("PackageA", "1.0.0", out PackageIdentity packageA)
                                                      .Dependency(packageB, "net45")
                                                      .Library("net45");

                ProjectCreator.Templates.SdkCsproj(
                    targetFramework: "net45")
                .ItemPackageReference(packageA)
                .Save(Path.Combine(TestRootPath, "ClassLibraryA", "ClassLibraryA.csproj"))
                .TryBuild(restore: true, out bool result, out BuildOutput buildOutput);

                result.ShouldBeTrue(buildOutput.GetConsoleLog());
            };
示例#20
0
        public void BasicPackage()
        {
            using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                         .Package("PackageD", "1.2.3-beta", out Package package)
                                                         .Library("net45"))
            {
                package.ShouldNotBeNull();

                package.Id.ShouldBe("PackageD");
                package.Version.ShouldBe("1.2.3-beta");

                FileInfo nuspecFileInfo = new FileInfo(packageRepository.GetManifestFilePath(package.Id, package.Version)).ShouldExist();

                NuspecReader nuspec = new NuspecReader(nuspecFileInfo);

                nuspec.Authors.ShouldBe("UserA");
                nuspec.Description.ShouldBe("Description");
                nuspec.DevelopmentDependency.ShouldBeFalse();
                nuspec.Id.ShouldBe("PackageD");
                nuspec.RequireLicenseAcceptance.ShouldBeFalse();
            }
        }
示例#21
0
        public long CreatePackage(User controller, DateTime date, Organization organization, IEnumerable <long> files, string comment)
        {
            Package package = new Package
            {
                Date         = date,
                Controller   = controller,
                Organization = organization,
                Comment      = comment
            };

            var unit_of_work = UnitOfWorkProvider.GetUnitOfWork();

            unit_of_work.BeginTransaction();

            PackageRepository.Create(package);

            unit_of_work.Commit();

            UpdatePackageFiles(package.Id, files);

            return(package.Id);
        }
示例#22
0
        public void BasicPackage()
        {
            PackageRepository.Create(TestRootPath)
            .Package("PackageD", "1.2.3-beta", out PackageIdentity package);

            package.ShouldNotBeNull();

            package.Id.ShouldBe("PackageD");
            package.Version.ShouldBe(NuGetVersion.Parse("1.2.3-beta"));

            FileInfo manifestFilePath = new FileInfo(VersionFolderPathResolver.GetManifestFilePath(package.Id, package.Version))
                                        .ShouldExist();

            using (Stream stream = File.OpenRead(manifestFilePath.FullName))
            {
                Manifest manifest = Manifest.ReadFrom(stream, validateSchema: true);

                manifest.Metadata.Authors.ShouldBe(new[] { "UserA" });
                manifest.Metadata.Description.ShouldBe("Description");
                manifest.Metadata.DevelopmentDependency.ShouldBeFalse();
                manifest.Metadata.Id.ShouldBe("PackageD");
                manifest.Metadata.RequireLicenseAcceptance.ShouldBeFalse();
            }
        }
示例#23
0
        public void CanSetAllPackageProperties()
        {
            using (PackageRepository packageRepository = PackageRepository.Create(TestRootPath)
                                                         .Package(
                       id: "PackageD",
                       version: "1.2.3",
                       out Package package,
                       authors: "UserA;UserB",
                       description: "Custom description",
                       copyright: "Copyright 2000",
                       developmentDependency: true,
                       icon: Path.Combine("some", "icon.jpg"),
                       iconUrl: "https://icon.url",
                       language: "Pig latin",
                       licenseExpression: "MIT",
                       licenseVersion: "1.0.0",
                       owners: "Owner1;Owner2",
                       packageTypes: new List <string> {
                "Dependency", "DotnetCliTool"
            },
                       projectUrl: "https://project.url",
                       releaseNotes: "Release notes for PackageD",
                       repositoryType: "Git",
                       repositoryUrl: "https://repository.url",
                       repositoryBranch: "Branch1000",
                       repositoryCommit: "Commit14",
                       requireLicenseAcceptance: true,
                       serviceable: true,
                       summary: "Summary of PackageD",
                       tags: "Tag1 Tag2 Tag3",
                       title: "Title of PackageD"))
            {
                package.ShouldNotBeNull();

                package.Id.ShouldBe("PackageD");
                package.Version.ShouldBe("1.2.3");

                FileInfo nuspecFileInfo = new FileInfo(packageRepository.GetManifestFilePath(package.Id, package.Version)).ShouldExist();

                NuspecReader nuspec = new NuspecReader(nuspecFileInfo);

                nuspec.Authors.ShouldBe("UserA;UserB");
                nuspec.Copyright.ShouldBe("Copyright 2000");
                nuspec.Description.ShouldBe("Custom description");
                nuspec.DevelopmentDependency.ShouldBeTrue();
                nuspec.Icon.ShouldBe(Path.Combine("some", "icon.jpg"));
                nuspec.IconUrl.ShouldBe("https://icon.url");
                nuspec.Id.ShouldBe("PackageD");
                nuspec.Language.ShouldBe("Pig latin");
                nuspec.License.ShouldBe("MIT");
                nuspec.LicenseType.ShouldBe("expression");
                nuspec.LicenseVersion.ShouldBe("1.0.0");
                nuspec.Owners.ShouldBe("Owner1;Owner2");
                nuspec.PackageTypes.ShouldBe(new[] { "Dependency", "DotnetCliTool" });
                nuspec.ProjectUrl.ShouldBe("https://project.url");
                nuspec.ReleaseNotes.ShouldBe("Release notes for PackageD");
                nuspec.RepositoryBranch.ShouldBe("Branch1000");
                nuspec.RepositoryCommit.ShouldBe("Commit14");
                nuspec.RepositoryType.ShouldBe("Git");
                nuspec.RepositoryUrl.ShouldBe("https://repository.url");
                nuspec.RequireLicenseAcceptance.ShouldBeTrue();
                nuspec.Serviceable.ShouldBeTrue();
                nuspec.Summary.ShouldBe("Summary of PackageD");
                nuspec.Tags.ShouldBe("Tag1 Tag2 Tag3");
                nuspec.Title.ShouldBe("Title of PackageD");
            }
        }
示例#24
0
        public void CanSetAllPackageProperties()
        {
            PackageRepository.Create(TestRootPath)
            .Package(
                name: "PackageD",
                version: "1.2.3",
                package: out PackageIdentity package,
                authors: "UserA;UserB",
                description: "Custom description",
                copyright: "Copyright 2000",
                developmentDependency: true,
#if !NET46
                icon: @"some\icon.jpg",
#endif
                iconUrl: "https://icon.url",
                language: "Pig latin",
                licenseMetadata: new LicenseMetadata(LicenseType.Expression, "MIT", null, null, Version.Parse("1.0.0")),
                owners: "Owner1;Owner2",
                packageTypes: new List <PackageType> {
                PackageType.Dependency, PackageType.DotnetCliTool
            },
                projectUrl: "https://project.url",
                releaseNotes: "Release notes for PackageD",
                repositoryType: "Git",
                repositoryUrl: "https://repository.url",
                repositoryBranch: "Branch1000",
                repositoryCommit: "Commit14",
                requireLicenseAcceptance: true,
                serviceable: true,
                summary: "Summary of PackageD",
                tags: "Tag1 Tag2 Tag3",
                title: "Title of PackageD");

            package.ShouldNotBeNull();

            package.Id.ShouldBe("PackageD");
            package.Version.ShouldBe(NuGetVersion.Parse("1.2.3"));

            FileInfo manifestFilePath = new FileInfo(VersionFolderPathResolver.GetManifestFilePath(package.Id, package.Version))
                                        .ShouldExist();

            using (Stream stream = File.OpenRead(manifestFilePath.FullName))
            {
                Manifest manifest = Manifest.ReadFrom(stream, validateSchema: true);

                manifest.Metadata.Authors.ShouldBe(new[] { "UserA", "UserB" });
                manifest.Metadata.Copyright.ShouldBe("Copyright 2000");
                manifest.Metadata.Description.ShouldBe("Custom description");
                manifest.Metadata.DevelopmentDependency.ShouldBeTrue();
#if !NET46
                manifest.Metadata.Icon.ShouldBe(@"some\icon.jpg");
#endif
                manifest.Metadata.IconUrl.ShouldBe(new Uri("https://icon.url"));
                manifest.Metadata.Id.ShouldBe("PackageD");
                manifest.Metadata.Language.ShouldBe("Pig latin");
                manifest.Metadata.LicenseMetadata.License.ShouldBe("MIT");
                manifest.Metadata.LicenseMetadata.Type.ShouldBe(LicenseType.Expression);
                manifest.Metadata.LicenseMetadata.Version.ShouldBe(Version.Parse("1.0.0"));
                manifest.Metadata.Owners.ShouldBe(new[] { "Owner1", "Owner2" });
                manifest.Metadata.PackageTypes.ShouldBe(new[] { PackageType.Dependency, PackageType.DotnetCliTool });
                manifest.Metadata.ProjectUrl.ShouldBe(new Uri("https://project.url"));
                manifest.Metadata.ReleaseNotes.ShouldBe("Release notes for PackageD");
                manifest.Metadata.Repository.Branch.ShouldBe("Branch1000");
                manifest.Metadata.Repository.Commit.ShouldBe("Commit14");
                manifest.Metadata.Repository.Type.ShouldBe("Git");
                manifest.Metadata.Repository.Url.ShouldBe("https://repository.url");
                manifest.Metadata.RequireLicenseAcceptance.ShouldBeTrue();
                manifest.Metadata.Serviceable.ShouldBeTrue();
                manifest.Metadata.Summary.ShouldBe("Summary of PackageD");
                manifest.Metadata.Tags.ShouldBe("Tag1 Tag2 Tag3");
                manifest.Metadata.Title.ShouldBe("Title of PackageD");
            }
        }