Example #1
0
        private List <PackageIdentity> GetPackages()
        {
            var packages = new List <PackageIdentity>();

            // Include all package references that aren't ourselves.
            foreach (var packageReference in PackageReferences)
            {
                var include = packageReference.GetMetadata("PackageName");

                if (ExclusionPackageReferenceSet.Contains(include))
                {
                    continue;
                }

                if (!VersionRange.TryParse(packageReference.GetMetadata("Version"), out var nuGetVersion))
                {
                    this.Log().Error($"Package {include} does not have a valid Version.");
                    continue;
                }

                var libraryRange    = new LibraryRange(include, nuGetVersion, LibraryDependencyTarget.Package);
                var packageIdentity = NuGetPackageHelper.GetBestMatch(libraryRange).GetAwaiter().GetResult();
                packages.Add(packageIdentity);
            }

            return(packages);
        }
Example #2
0
        /// <inheritdoc />
        public async override Task Extract()
        {
            var packageUnzipPath = await NuGetPackageHelper.InstallPackages(_packageNames, Platform).ConfigureAwait(false);

            Log.Debug($"Package unzip path is {packageUnzipPath}");

            var xamarinForms =
                Directory.GetFiles(
                    packageUnzipPath,
                    "Xamarin.Essentials.dll",
                    SearchOption.AllDirectories);

            var latestVersion = xamarinForms.First(x => x.Contains("netstandard1.0", StringComparison.InvariantCulture));

            Assemblies.Add(latestVersion);

            if (PlatformHelper.IsRunningOnMono())
            {
                CecilSearchDirectories.Add(
                    @"/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile111");
            }
            else
            {
                CecilSearchDirectories.Add(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile111");
            }
        }
Example #3
0
        /// <inheritdoc />
        public async override Task Extract()
        {
            var packageUnzipPath = await NuGetPackageHelper.InstallPackages(_packageNames, Platform).ConfigureAwait(false);

            Log.Debug($"Package unzip path is {packageUnzipPath}");

            var xamarinForms =
                Directory.GetFiles(
                    packageUnzipPath,
                    "Xamarin.Forms.Core.dll",
                    SearchOption.AllDirectories);

            var latestVersion = xamarinForms.Last();

            Assemblies.Add(latestVersion);

            if (PlatformHelper.IsRunningOnMono())
            {
                CecilSearchDirectories.Add(
                    @"/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile111");
                CecilSearchDirectories.Add(@"/Library/Frameworks/Mono.framework/External/xbuild-frameworks/MonoAndroid/v1.0/Facades");
            }
            else
            {
                CecilSearchDirectories.Add(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades");
            }
        }
        /// <inheritdoc />
        /// <exception cref="NotSupportedException">Building events for WPF on Mac is not implemented.</exception>
        public override async Task Extract(string referenceAssembliesLocation)
        {
            var results = await NuGetPackageHelper.DownloadPackageFilesAndFolder(new[] { ReferenceNuGet }, new[] { ReferenceFramework }, packageOutputDirectory : _filePath).ConfigureAwait(false);

            Input.SupportGroup = results.SupportGroup;

            SetFiles(results);
        }
        public async Task MultipleDirectoryCase()
        {
            // NetCore contains multiple directories that match.
            var package    = new[] { new PackageIdentity("Microsoft.NETCore.App", new NuGetVersion("2.0.0")) };
            var frameworks = new[] { FrameworkConstants.CommonFrameworks.NetCoreApp20 };

            var result = (await NuGetPackageHelper
                          .DownloadPackageFilesAndFolder(package, frameworks, packageOutputDirectory: _packageDirectory)
                          .ConfigureAwait(false));
        }
        private async Task PopulatePackages()
        {
            var packageNames = NugetPackages[Name];

            foreach (var packageName in packageNames)
            {
                var searchCriteria = new PackageSearchCriteria
                {
                    IntegrationName        = Name,
                    NugetPackageSearchName = packageName,
                    MinVersion             = "0.0.1",
                    MaxVersionExclusive    = "255.255.255"
                };

                var packages = await NuGetPackageHelper.GetPackageMetadatas(searchCriteria);

                var potentiallySupportedPackages = packages
                                                   .Where(p => p.Identity.HasVersion)
                                                   .OrderByDescending(p => p.Identity.Version)
                                                   .ToList();

                // TODO: Download and check referenced assemblies for assembly versions
                //foreach (var potentiallySupportedPackage in potentiallySupportedPackages)
                //{
                //    potentiallySupportedPackage.
                //}

                var latestPackage = potentiallySupportedPackages.First();
                var latestVersion = new Version(latestPackage.Identity.Version.ToNormalizedString());

                var latestSupportedPackage = potentiallySupportedPackages
                                             .FirstOrDefault(x => x.Identity.Version.Version <= MaximumAssemblyVersion);

                if (latestSupportedPackage is null)
                {
                    Logger.Warn($"No version of {packageName} below maximum package version {MaximumAssemblyVersion}." +
                                $"Using latest instead");
                }

                var latestSupportedVersion = latestSupportedPackage is null
                                                 ? latestVersion
                                                 : new Version(latestSupportedPackage.Identity.Version.ToNormalizedString());

                Packages.Add(new IntegrationPackage
                {
                    NugetName            = latestPackage.Identity.Id,
                    LatestNuget          = latestVersion,
                    LatestSupportedNuget = latestSupportedVersion,
                });
            }
        }
Example #7
0
        /// <inheritdoc />
        public override async Task Extract()
        {
            var packageUnzipPath = await NuGetPackageHelper.InstallPackages(_packageNames, Platform, FrameworkConstants.CommonFrameworks.Tizen4).ConfigureAwait(false);

            Log.Debug($"Package unzip path is {packageUnzipPath}");

            Assemblies.AddRange(Directory.GetFiles(packageUnzipPath, "ElmSharp*.dll", SearchOption.AllDirectories));
            Assemblies.AddRange(Directory.GetFiles(packageUnzipPath, "Tizen*.dll", SearchOption.AllDirectories));

            foreach (var directory in Directory.GetDirectories(packageUnzipPath, "*.*", SearchOption.AllDirectories))
            {
                CecilSearchDirectories.Add(directory);
            }
        }
Example #8
0
        public async Task CanGetNetCoreApp20()
        {
            var package    = new[] { new PackageIdentity("Microsoft.NETCore.App", new NuGetVersion("2.0.0")) };
            var frameworks = new[] { FrameworkConstants.CommonFrameworks.NetCoreApp20 };

            var result = await NuGetPackageHelper
                         .DownloadPackageFilesAndFolder(package, frameworks, packageOutputDirectory : TestUtilities.GetPackageDirectory())
                         .ConfigureAwait(false);

            var includeFiles = result.IncludeGroup.GetAllFileNames().ToList();

            includeFiles.ShouldNotBeEmpty();
            includeFiles.Where(x => x.EndsWith(".dll")).ShouldNotBeEmpty();
        }
Example #9
0
        private static string GetWindowsInstallationDirectory(bool includePreRelease)
        {
            return(_windowsInstallationDirectory.GetOrAdd(
                       includePreRelease,
                       incPreRelease =>
            {
                return Task.Run(
                    async() =>
                {
                    var results = await NuGetPackageHelper.DownloadPackageFilesAndFolder(
                        new[] { VSWherePackageIdentity },
                        new[] { new NuGetFramework("Any") },
                        packageFolders: new[] { PackagingConstants.Folders.Tools },
                        getDependencies: false).ConfigureAwait(false);

                    var fileName = results.IncludeGroup.GetAllFileNames().FirstOrDefault(x => x.EndsWith("vswhere.exe", StringComparison.InvariantCultureIgnoreCase));

                    if (fileName == null)
                    {
                        throw new ReferenceLocationNotFoundException("Cannot find visual studio installation, due to vswhere not being installed correctly.");
                    }

                    var parameters = new StringBuilder("-latest -nologo -property installationPath -format value");

                    if (incPreRelease)
                    {
                        parameters.Append(" -prerelease");
                    }

                    using (var process = new Process())
                    {
                        process.StartInfo.FileName = fileName;
                        process.StartInfo.Arguments = parameters.ToString();
                        process.StartInfo.UseShellExecute = false;
                        process.StartInfo.RedirectStandardOutput = true;

                        process.Start();

                        // To avoid deadlocks, always read the output stream first and then wait.
                        var output = process.StandardOutput.ReadToEnd().Replace(Environment.NewLine, string.Empty);
                        process.WaitForExit();

                        return output;
                    }
                }).ConfigureAwait(false).GetAwaiter().GetResult();
            }));
        }
        public static async Task CheckResultsAgainstTemplate(LibraryRange[] package, IReadOnlyList <NuGetFramework> frameworks, [CallerFilePath] string filePath = null, [CallerMemberName] string memberName = null)
        {
            var sourceRepository = new SourceRepository(new PackageSource(NuGetPackageHelper.DefaultNuGetSource), NuGetPackageHelper.Providers);
            var findResource     = await sourceRepository.GetResourceAsync <FindPackageByIdResource>().ConfigureAwait(false);

            var bestPackageIdentity = await NuGetPackageHelper.GetBestMatch(package[0], findResource, CancellationToken.None).ConfigureAwait(false);

            using (var memoryStream = new MemoryStream())
            {
                using (var streamWriter = new StreamWriter(memoryStream, Encoding.UTF8, 1024, true))
                {
                    await ObservablesForEventGenerator.ExtractEventsFromNuGetPackages(streamWriter, package, frameworks, TestUtilities.GetPackageDirectory(memberName, filePath)).ConfigureAwait(false);
                }

                CheckPackageIdentityContents(memoryStream, bestPackageIdentity, frameworks[0], filePath);
            }
        }
Example #11
0
        /// <inheritdoc />
        public override async Task Extract()
        {
            var packageUnzipPath = await NuGetPackageHelper.InstallPackages(_packageNames, Platform).ConfigureAwait(false);

            Log.Debug($"Package unzip path is {packageUnzipPath}");

            var xamarinForms =
                Directory.GetFiles(
                    packageUnzipPath,
                    "Xamarin.Essentials.dll",
                    SearchOption.AllDirectories);

            var latestVersion = xamarinForms.First(x => x.Contains("netstandard2.0", StringComparison.InvariantCulture));

            Assemblies.Add(latestVersion);

            foreach (var directory in Directory.GetDirectories(packageUnzipPath, "*.*", SearchOption.AllDirectories))
            {
                CecilSearchDirectories.Add(directory);
            }
        }
Example #12
0
        public async Task IntegrationTestAssemblyTest()
        {
            using (var memoryStream = new MemoryStream())
            {
                var input = await NuGetPackageHelper.DownloadPackageFilesAndFolder(new[] { new PackageIdentity("NETStandard.Library", new NuGetVersion("2.0.0")) }).ConfigureAwait(false);

                using (var streamWriter = new StreamWriter(memoryStream, Encoding.UTF8, 1024, true))
                {
                    await ObservablesForEventGenerator.ExtractEventsFromAssemblies(streamWriter, input, FrameworkConstants.CommonFrameworks.NetStandard20).ConfigureAwait(false);
                }

                memoryStream.Flush();

                memoryStream.Position = 0;
                using (var sr = new StreamReader(memoryStream))
                {
                    var contents = sr.ReadToEnd();

                    contents.ShouldNotBeEmpty();
                }
            }
        }
Example #13
0
        private static async Task GetAndCheckTizenPackage()
        {
            var package    = new[] { new PackageIdentity("Tizen.NET.API4", new NuGetVersion("4.0.1.14152")) };
            var frameworks = new[] { FrameworkConstants.CommonFrameworks.NetStandard20 };

            var testPackageLocation = TestUtilities.GetPackageDirectory();

            var result = await NuGetPackageHelper
                         .DownloadPackageFilesAndFolder(package, frameworks, packageOutputDirectory : testPackageLocation)
                         .ConfigureAwait(false);

            var includeFiles = result.IncludeGroup.GetAllFileNames().ToList();
            var actualFiles  = includeFiles.Where(x => x.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase)).ToList();

            includeFiles.ShouldNotBeEmpty();
            actualFiles.ShouldNotBeEmpty();

            Assert.True(actualFiles.All(File.Exists));

            var actualFileNames = actualFiles.Select(Path.GetFileName).ToList();

            ExpectedTizenFiles.ShouldHaveSameContents(actualFileNames);
        }
Example #14
0
 /// <summary>
 /// Extracts the data using the specified target framework.
 /// </summary>
 /// <param name="targetFrameworks">The target framework to extract in order of priority.</param>
 /// <param name="packages">The packages to extract the information from.</param>
 /// <param name="packageOutputDirectory">Directory for the packages, if null a random path in the temp folder will be used.</param>
 /// <returns>A task to monitor the progress.</returns>
 public async Task Extract(IReadOnlyCollection <NuGetFramework> targetFrameworks, IReadOnlyCollection <LibraryRange> packages, string?packageOutputDirectory)
 {
     Input = await NuGetPackageHelper.DownloadPackageFilesAndFolder(packages, targetFrameworks, packageOutputDirectory : packageOutputDirectory).ConfigureAwait(false);
 }