コード例 #1
0
        public NuGetPackageManager(ILogger logger, string packagesDirectory, IEnumerable <string> repositories)
        {
            this.logger            = logger;
            this.packagesDirectory = packagesDirectory;
            this.repositories      = repositories;
            providers = new List <Lazy <INuGetResourceProvider> >();
            providers.AddRange(Repository.Provider.GetCoreV3()); // Add v3 API support

            nugetSettings = Settings.LoadDefaultSettings(null);

            frameworkReducer = new FrameworkReducer();

            var frameworkName = Assembly.GetExecutingAssembly().GetCustomAttributes(true)
                                .OfType <System.Runtime.Versioning.TargetFrameworkAttribute>()
                                .Select(x => x.FrameworkName)
                                .FirstOrDefault();

            currentFramework = frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider());

            packagePathResolver     = new PackagePathResolver(packagesDirectory);
            packageResolver         = new PackageResolver();
            loadedPackageAssemblies = new Dictionary <string, List <CachedNuGetAssembly> >();
            InstallAssemblyResolver();
        }
コード例 #2
0
        public string GetShortFrameworkName(FrameworkName frameworkName)
        {
            if (frameworkName == null)
            {
                throw new ArgumentNullException(nameof(frameworkName));
            }

            var nuGetFramework = NuGetFramework.ParseFrameworkName(
                frameworkName.ToString(),
                DefaultFrameworkNameProvider.Instance);

            try
            {
                return(nuGetFramework.GetShortFolderName());
            }
            catch (FrameworkException e)
            {
                // Wrap this exception for two reasons:
                //
                // 1) FrameworkException is not a .NET Framework type and therefore is not
                //    recognized by other components in Visual Studio.
                //
                // 2) Changing our NuGet code to throw ArgumentException is not appropriate in
                //    this case because the failure does not occur in a method that has arguments!
                var message = string.Format(
                    CultureInfo.CurrentCulture,
                    VsResources.CouldNotGetShortFrameworkName,
                    frameworkName);
                throw new ArgumentException(message, e);
            }
        }
コード例 #3
0
        /// <summary>
        /// Gets the list of packages to install along with there dependencies
        /// </summary>
        /// <param name="repository">The package repository</param>
        /// <param name="seederConfiguration">The seeder configuration</param>
        /// <returns>The list of packages</returns>
        private static async Task <IEnumerable <PackageIdentity> > GetPackagesToInstall(
            IPackageRepository repository,
            SeederConfiguration seederConfiguration)
        {
            // TODO: extract to helper method along with Configuration extensions
            var supportedFramework = NuGetFramework.ParseFrameworkName(
                PackageRepositoryExtensions.CurrentRuntime,
                DefaultFrameworkNameProvider.Instance);

            var packageTasks =
                seederConfiguration.RequiredPackages.Select(
                    async packageName =>
            {
                var package = await repository.GetAsync(packageName);
                if (package == null)
                {
                    throw new PackageNotFoundException(packageName);
                }

                return(package);
            });

            var packagesToInstall = (await Task.WhenAll(packageTasks)).ToDictionary(p => p.Identity.Id);
            var queue             = new Queue <IPackageSearchMetadata>(packagesToInstall.Values);

            while (queue.Count > 0)
            {
                var package       = queue.Dequeue();
                var dependencySet =
                    NuGetFrameworkUtility.GetNearest(package.DependencySets, supportedFramework);
                if (dependencySet == null || !NuGetFrameworkUtility.IsCompatibleWithFallbackCheck(
                        supportedFramework,
                        dependencySet.TargetFramework))
                {
                    continue;
                }

                foreach (var dependency in dependencySet.Packages)
                {
                    IPackageSearchMetadata packageToInstall;
                    if (!packagesToInstall.TryGetValue(dependency.Id, out packageToInstall))
                    {
                        packageToInstall = await repository.GetAsync(dependency.Id);

                        if (packageToInstall == null)
                        {
                            throw new PackageNotFoundException(dependency.Id);
                        }

                        packagesToInstall.Add(dependency.Id, packageToInstall);
                        if (queue.All(p => p.Identity.Id != packageToInstall.Identity.Id))
                        {
                            queue.Enqueue(packageToInstall);
                        }
                    }
                }
            }

            return(packagesToInstall.Values.Select(p => p.Identity));
        }
コード例 #4
0
        public List <PackageIdentity> GetChildPackageIdentities(IPackageSearchMetadata rootPackage)
        {
            List <PackageIdentity> childPackageIdentities = new List <PackageIdentity>();

            //
            //load child package identity , if there is any dependency set
            if (rootPackage.DependencySets != null && rootPackage.DependencySets.Count() > 0)
            {
                //check specific dependency set for this version only  //note our _targetFramwork is .NETCoreApp,Version=v2.0
                //while the deps may be for .NETStandard,Version=v2.0 or .NETCoreApp,Version = v2.0 as well.

                var nugetFramwork           = NuGetFramework.ParseFrameworkName(NugetHelper.Instance.GetTargetFramwork(), new DefaultFrameworkNameProvider());
                var mostCompatibleFramework = NugetHelper.Instance.GetMostCompatibleFramework(nugetFramwork, rootPackage.DependencySets);


                if (rootPackage.DependencySets.Any(x => x.TargetFramework == mostCompatibleFramework))
                {
                    var depsForTargetFramwork = rootPackage.DependencySets.Where(x => x.TargetFramework == mostCompatibleFramework).FirstOrDefault();
                    if (depsForTargetFramwork.Packages.Count() > 0)
                    {
                        foreach (var package in depsForTargetFramwork.Packages)
                        {
                            PackageIdentity _identity = new PackageIdentity(package.Id, package.VersionRange.MinVersion);
                            if (_identity != null)
                            {
                                childPackageIdentities.Add(_identity);
                            }
                        }
                    }
                }
            }

            //
            return(childPackageIdentities);
        }
コード例 #5
0
        public void with_two_assemblies_framework_assemblies_are_updated_in_correct_group()
        {
            var builder = new SpecificationBuilder();

            builder.WithAssembly(@"regular\output\net40\EDO.Diagnostics.Core.dll".GetTestFileInfo());
            builder.WithAssembly(@"regular\output\net45\EDO.Diagnostics.Core.dll".GetTestFileInfo());
            var nuGetFrameworks = new List <NuGetFramework>()
            {
                NuGetFramework.ParseFrameworkName(".Net Framework 4",
                                                  DefaultFrameworkNameProvider.Instance)
                ,
                NuGetFramework.ParseFrameworkName(".Net Framework 4.5.2",
                                                  DefaultFrameworkNameProvider.Instance)
            };
            var expectedAssemblies = new List <FrameworkAssemblyReference>()
            {
                new FrameworkAssemblyReference(
                    "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                    nuGetFrameworks)
                ,
                new FrameworkAssemblyReference(
                    "System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                    nuGetFrameworks)
            };

            CollectionAssert.AreEqual(expectedAssemblies, builder.Specification.FrameworkAssemblies,
                                      FrameworkAssemblyReferenceComparer.Default,
                                      "unexpected version retrieved from assembly");
        }
コード例 #6
0
        public PackagesConfigNuGetProject(string folderPath, Dictionary <string, object> metadata)
            : base(metadata)
        {
            if (folderPath == null)
            {
                throw new ArgumentNullException(nameof(folderPath));
            }

            // In ProjectFactory.cs, an instance of _project is initialized as a dynamic through
            // Activator.CreateInstance.  It has a Dictionary<string, object> which is later
            // provided to this constructor.  Occasionally, the value is a string, occasionally, it
            // is a NuGetFramework.  Not knowing why that's happening, we can protect against it here.
            // https://github.com/NuGet/Home/issues/4491

            var oFramework = GetMetadata <object>(NuGetProjectMetadataKeys.TargetFramework);

            TargetFramework = oFramework is string
                              ?NuGetFramework.ParseFrameworkName((string)oFramework, DefaultFrameworkNameProvider.Instance)
                                  : (NuGetFramework)oFramework;

            PackagesConfigPath = Path.Combine(folderPath, "packages.config");

            var projectName = GetMetadata <string>(NuGetProjectMetadataKeys.Name);

            PackagesProjectNameConfigPath = Path.Combine(folderPath, "packages." + projectName + ".config");
        }
コード例 #7
0
        public IEnumerable <FrameworkName> GetFrameworksSupportingNetStandard(FrameworkName frameworkName)
        {
            if (frameworkName == null)
            {
                throw new ArgumentNullException(nameof(frameworkName));
            }

            try
            {
                var nuGetFramework = NuGetFramework.ParseFrameworkName(frameworkName.ToString(), DefaultFrameworkNameProvider.Instance);

                if (!StringComparer.OrdinalIgnoreCase.Equals(
                        nuGetFramework.Framework,
                        FrameworkConstants.FrameworkIdentifiers.NetStandard))
                {
                    throw new ArgumentException(string.Format(
                                                    VsResources.InvalidNetStandardFramework,
                                                    frameworkName));
                }

                return(CompatibilityListProvider
                       .Default
                       .GetFrameworksSupporting(nuGetFramework)
                       .Select(framework => new FrameworkName(framework.DotNetFrameworkName))
                       .ToList());
            }
            catch (Exception exception)
            {
                _telemetryProvider.PostFault(exception, typeof(VsFrameworkCompatibility).FullName);
                throw;
            }
        }
コード例 #8
0
        /// <summary>
        /// Extracts the lib files to execution directory
        /// </summary>
        /// <param name="package">
        /// The package to extract
        /// </param>
        /// <param name="runtime">
        /// The current runtime
        /// </param>
        /// <param name="frameworkName">
        /// The current framework name
        /// </param>
        /// <param name="executionDir">
        /// The execution directory to load packages
        /// </param>
        /// <param name="logAction">The log writing action</param>
        /// <returns>
        /// The list of extracted files
        /// </returns>
        private static IEnumerable <string> ExtractPackage(
            DownloadResourceResult package,
            string runtime,
            NuGetFramework frameworkName,
            string executionDir,
            Action <string> logAction = null)
        {
            try
            {
                var id    = package.PackageReader.GetIdentity();
                var files = NuGetFrameworkUtility.GetNearest(package.PackageReader.GetLibItems(), frameworkName)?.Items.ToList()
                            ?? NuGetFrameworkUtility.GetNearest(package.PackageReader.GetToolItems(), frameworkName)?.Items.ToList();

                if (files == null || files.Count == 0)
                {
                    var collection = new ContentItemCollection();
                    collection.Load(package.PackageReader.GetFiles());

                    var conventions = new ManagedCodeConventions(runtimeGraph);
                    var criteria    = conventions.Criteria.ForFrameworkAndRuntime(
                        NuGetFramework.ParseFrameworkName(
                            PackageRepositoryExtensions.CurrentRuntime,
                            DefaultFrameworkNameProvider.Instance),
                        runtime);

                    files = collection.FindBestItemGroup(criteria, conventions.Patterns.NativeLibraries)?.Items
                            .Select(i => i.Path).ToList();
                    if (files == null || files.Count == 0)
                    {
                        files = collection.FindBestItemGroup(criteria, conventions.Patterns.RuntimeAssemblies)?.Items
                                .Select(i => i.Path).ToList();
                    }

                    if (files == null || files.Count == 0)
                    {
                        return(new string[0]);
                    }
                    else
                    {
                        logAction?.Invoke($"{id.Id}: {string.Join(", ", files)}");
                    }
                }

                foreach (var file in files)
                {
                    using (var fileStream = File.Create(Path.Combine(executionDir, Path.GetFileName(file) ?? file)))
                    {
                        package.PackageReader.GetStream(file).CopyTo(fileStream);
                    }
                }

                return(files.Select(file => Path.GetFileName(file) ?? file));
            }
            finally
            {
                package.Dispose();
            }
        }
コード例 #9
0
        private FrameworkName GetNearestImpl(FrameworkName targetFramework, IEnumerable <FrameworkName> fallbackTargetFrameworks, IEnumerable <FrameworkName> frameworks)
        {
            if (targetFramework == null)
            {
                throw new ArgumentNullException(nameof(targetFramework));
            }

            if (fallbackTargetFrameworks == null)
            {
                throw new ArgumentNullException(nameof(fallbackTargetFrameworks));
            }

            if (frameworks == null)
            {
                throw new ArgumentNullException(nameof(frameworks));
            }

            IEnumerable <NuGetFramework> ParseAllFrameworks(IEnumerable <FrameworkName> frameworks)
            {
                foreach (FrameworkName frameworkName in frameworks)
                {
                    if (frameworkName == null)
                    {
                        throw new ArgumentException(message: VsResourcesFormat.PropertyCannotBeNull(nameof(FrameworkName)), paramName: nameof(frameworks));
                    }

                    NuGetFramework nugetFramework = NuGetFramework.ParseFrameworkName(frameworkName.ToString(), DefaultFrameworkNameProvider.Instance);
                    yield return(nugetFramework);
                }
            }

            var nuGetTargetFramework          = NuGetFramework.ParseFrameworkName(targetFramework.ToString(), DefaultFrameworkNameProvider.Instance);
            var nuGetFallbackTargetFrameworks = ParseAllFrameworks(fallbackTargetFrameworks).ToList();
            var nuGetFrameworks = ParseAllFrameworks(frameworks).ToList();

            try
            {
                if (nuGetFallbackTargetFrameworks.Any())
                {
                    nuGetTargetFramework = new FallbackFramework(nuGetTargetFramework, nuGetFallbackTargetFrameworks);
                }

                var reducer = new FrameworkReducer();
                var nearest = reducer.GetNearest(nuGetTargetFramework, nuGetFrameworks);

                if (nearest == null)
                {
                    return(null);
                }

                return(new FrameworkName(nearest.DotNetFrameworkName));
            }
            catch (Exception exception)
            {
                _telemetryProvider.PostFault(exception, typeof(VsFrameworkCompatibility).FullName);
                throw;
            }
        }
コード例 #10
0
        public NuGetFramework GetTargetNugetFramework()
        {
            var frameworkName    = GetTargetFramework();
            var currentFramework = frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider());

            return(currentFramework);
        }
コード例 #11
0
ファイル: PackageLoader.cs プロジェクト: AartOdding/ZigZag
        static PackageLoader()
        {
            m_localRepositories = new List <NuGetv3LocalRepository>();
            m_loadedPackages    = new Dictionary <string, Package>();
            var frameworkName = Assembly.GetExecutingAssembly().
                                GetCustomAttribute <TargetFrameworkAttribute>().FrameworkName;

            m_framework = NuGetFramework.ParseFrameworkName(frameworkName,
                                                            DefaultFrameworkNameProvider.Instance);
        }
コード例 #12
0
        private async Task PopulateDependencies(Dependency dependency)
        {
            var dependencies = new List <Dependency>();

            NuGetVersion.TryParse(dependency.Version, out var version);
            var package   = new PackageIdentity(dependency.Name, version);
            var framework = String.IsNullOrEmpty(dependency.Framework)
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(dependency.Framework, new DefaultFrameworkNameProvider());

            var dependencyInfo = await _dependencyResolver.ResolvePackage(package, framework, _cacheContext, _logger, _cancellationToken);

            if (dependencyInfo == null)
            {
                _logger.LogWarning($"Package not available in source(s): {dependency.Name} {dependency.Version}. Required by {dependency.Project}");
                return;
            }

            dependency.FoundInSources = true;

            if (dependencyInfo?.Dependencies == null)
            {
                return;
            }

            foreach (var info in dependencyInfo.Dependencies)
            {
                var searchResults = await _metadataProvider.GetMetadataAsync(info.Id, includePrerelease : INCLUDE_PRERELEASE, includeUnlisted : false, sourceCacheContext : _cacheContext, _logger, _cancellationToken);

                var metadata = searchResults.OrderBy(s => s.Identity.Version).LastOrDefault(r => info.VersionRange.Satisfies(r.Identity.Version));

                if (metadata == null)
                {
                    _logger.LogWarning($"Package not available in source(s): {info.Id} {info.VersionRange}.  Required by {dependency.Name} from {dependency.Project}");
                    continue;
                }

                var subpackage = await _dependencyResolver.ResolvePackage(metadata.Identity, framework, _cacheContext, _logger, _cancellationToken);

                var childDependency = new Dependency
                {
                    Framework      = dependency.Framework,
                    Name           = subpackage.Id,
                    Version        = subpackage.Version?.Version?.ToString(),
                    Project        = dependency.Project,
                    VersionLimited = info.VersionRange.MaxVersion == null ? null : $"{info.VersionRange.MaxVersion.Version.ToString()} by {dependency.Name} ({dependency.Version})"
                };

                dependencies.Add(childDependency);

                await PopulateDependencies(childDependency);
            }

            dependency.Dependencies = dependencies;
        }
コード例 #13
0
 public static NuGetFramework TryParseFrameworkName(string frameworkString, IFrameworkNameProvider frameworkNameProvider)
 {
     try
     {
         return(NuGetFramework.ParseFrameworkName(frameworkString, frameworkNameProvider));
     }
     catch (ArgumentException)
     {
         return(NuGetFramework.UnsupportedFramework);
     }
 }
コード例 #14
0
 /// <summary>
 /// Creates a <see cref="PackageDependencyGroup"/> from string definition
 /// </summary>
 /// <param name="framework">The framework name</param>
 /// <param name="definition">The dependencies definition</param>
 /// <returns>The dependency set</returns>
 internal static PackageDependencyGroup CreatePackageDependencySet(string framework, params string[] definition)
 {
     return(new PackageDependencyGroup(
                NuGetFramework.ParseFrameworkName(framework, DefaultFrameworkNameProvider.Instance),
                definition.Select(
                    d =>
     {
         var parts = d.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
         return new PackageDependency(parts[0], CreateVersionRange(parts[1]));
     })));
 }
コード例 #15
0
ファイル: PackageInstaller.cs プロジェクト: cederlof/Wyam
        private NuGetFramework GetCurrentFramework()
        {
            string frameworkName = Assembly.GetExecutingAssembly().GetCustomAttributes(true)
                                   .OfType <System.Runtime.Versioning.TargetFrameworkAttribute>()
                                   .Select(x => x.FrameworkName)
                                   .FirstOrDefault();

            return(frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider()));
        }
コード例 #16
0
        public static NuGetFramework GetTargetFramework(Assembly assembly = null)
        {
            var frameworkName = (assembly ?? Assembly.GetCallingAssembly()).GetCustomAttributes(true)
                                .OfType <TargetFrameworkAttribute>()
                                .Select(x => x.FrameworkName)
                                .FirstOrDefault();
            var currentFramework = frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider());

            return(currentFramework);
        }
コード例 #17
0
        /// <summary>
        /// Creates test package from assembly
        /// </summary>
        /// <param name="assembly">The source assembly</param>
        /// <param name="allAssemblies">The list of all defined assemblies</param>
        /// <returns>The test package</returns>
        private static TestPackage CreateTestPackage(Assembly assembly, Assembly[] allAssemblies)
        {
            var dependencies = assembly.GetReferencedAssemblies().Select(
                d =>
            {
                var dependentAssembly = allAssemblies.FirstOrDefault(a => a.GetName().Name == d.Name);
                return(dependentAssembly != null && !dependentAssembly.IsDynamic
#if APPDOMAIN
                       && !dependentAssembly.GlobalAssemblyCache
#endif
                                   ? dependentAssembly
                                   : null);
            }).Where(d => d != null).Select(
                d => new PackageDependency(
                    d.GetName().Name,
                    new VersionRange(NuGetVersion.Parse(d.GetName().Version.ToString())))).ToList();

            var standardDependencies = new PackageDependencyGroup(
                NuGetFramework.ParseFrameworkName(
                    ConfigurationCheckTestsBase.NetCore,
                    DefaultFrameworkNameProvider.Instance),
                dependencies);
            var net46Dependencies = new PackageDependencyGroup(
                NuGetFramework.ParseFrameworkName(
                    ConfigurationCheckTestsBase.Net46,
                    DefaultFrameworkNameProvider.Instance),
                dependencies);

            Func <string, string, string, IEnumerable <string> > extaction = (framework, destination, temp) =>
            {
                if (string.IsNullOrWhiteSpace(assembly.Location))
                {
                    throw new InvalidOperationException("Assembly has no location");
                }

                var fileName = Path.GetFileName(assembly.Location);
                File.Copy(assembly.Location, Path.Combine(destination, fileName));
                return(new[] { fileName });
            };

            return(new TestPackage(assembly.GetName().Name, assembly.GetName().Version.ToString())
            {
                DependencySets =
                    new[]
                {
                    standardDependencies,
                    net46Dependencies
                },
                Extract =
                    extaction
            });
        }
コード例 #18
0
        public string GetShortFrameworkName(FrameworkName frameworkName)
        {
#pragma warning disable CS0618 // Type or member is obsolete
            const string eventName = nameof(IVsFrameworkParser) + "." + nameof(GetShortFrameworkName);
#pragma warning restore CS0618 // Type or member is obsolete
            using var _ = NuGetETW.ExtensibilityEventSource.StartStopEvent(eventName,
                                                                           new
            {
                Framework = frameworkName?.FullName
            });

            if (frameworkName == null)
            {
                throw new ArgumentNullException(nameof(frameworkName));
            }

            try
            {
                var nuGetFramework = NuGetFramework.ParseFrameworkName(
                    frameworkName.ToString(),
                    DefaultFrameworkNameProvider.Instance);

                try
                {
                    return(nuGetFramework.GetShortFolderName());
                }
                catch (FrameworkException e)
                {
                    // Wrap this exception for two reasons:
                    //
                    // 1) FrameworkException is not a .NET Framework type and therefore is not
                    //    recognized by other components in Visual Studio.
                    //
                    // 2) Changing our NuGet code to throw ArgumentException is not appropriate in
                    //    this case because the failure does not occur in a method that has arguments!
                    var message = string.Format(
                        CultureInfo.CurrentCulture,
                        VsResources.CouldNotGetShortFrameworkName,
                        frameworkName);
                    throw new ArgumentException(message, e);
                }
            }
            catch (ArgumentException)
            {
                throw;
            }
            catch (Exception exception)
            {
                _telemetryProvider.PostFault(exception, typeof(VsFrameworkParser).FullName);
                throw;
            }
        }
コード例 #19
0
        public NuGetPackageManager(string packagesDirectory)
        {
            m_AssemblyLoader = Assembly.Load;

            Logger            = new NullLogger();
            PackagesDirectory = packagesDirectory;
            m_Providers       = new List <Lazy <INuGetResourceProvider> >();
            m_Providers.AddRange(Repository.Provider.GetCoreV3()); // Add v3 API support

            const string nugetFile = "NuGet.Config";

            if (!Directory.Exists(packagesDirectory))
            {
                Directory.CreateDirectory(packagesDirectory);
            }

            var nugetConfig = Path.Combine(packagesDirectory, nugetFile);

            if (!File.Exists(nugetConfig))
            {
                var nl = Environment.NewLine;

                File.WriteAllText(nugetConfig,
                                  $"<?xml version=\"1.0\" encoding=\"utf-8\"?>{nl}"
                                  + $"<configuration>{nl}"
                                  + $"    <packageSources>{nl}"
                                  + $"        <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" protocolVersion=\"3\" />{nl}"
                                  + $"    </packageSources>{nl}"
                                  + "</configuration>");
            }

            m_NugetSettings = Settings.LoadDefaultSettings(packagesDirectory, nugetFile, null);

            m_FrameworkReducer = new FrameworkReducer();

            var frameworkName = Assembly.GetExecutingAssembly().GetCustomAttributes(true)
                                .OfType <System.Runtime.Versioning.TargetFrameworkAttribute>()
                                .Select(x => x.FrameworkName)
                                .FirstOrDefault();

            m_CurrentFramework = frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider());

            m_PackagePathResolver     = new PackagePathResolver(packagesDirectory);
            m_PackageResolver         = new PackageResolver();
            m_LoadedPackageAssemblies = new Dictionary <string, List <NuGetAssembly> >();
            m_ResolveCache            = new Dictionary <string, Assembly>();
            m_IgnoredDependendencies  = new HashSet <string>();
            InstallAssemblyResolver();
        }
コード例 #20
0
        private static NuGetFramework?ToNuGetFramework(object value)
        {
            // See https://github.com/NuGet/Home/issues/4491
            if (value is string stringValue)
            {
                return(NuGetFramework.ParseFrameworkName(stringValue, DefaultFrameworkNameProvider.Instance));
            }

            if (value is NuGetFramework frameworkValue)
            {
                return(frameworkValue);
            }

            return(null);
        }
コード例 #21
0
ファイル: Form2.cs プロジェクト: LDT2016/NugetDownloadApp
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox2.Text.Trim()
                    .Length
                    > 0)
                {
                    var nugetFramwork = NuGetFramework.ParseFrameworkName(NugetHelper.Instance.GetTargetFramwork(), new DefaultFrameworkNameProvider());

                    var nupkgPath = textBox2.Text.Trim();
                    var package   = new ZipPackage(nupkgPath);

                    //var content = package.GetContentFiles();
                    var files = package.GetLibFiles()
                                .ToList();

                    var targetDlls = files.FindAll(x => x.EffectivePath.ToLower()
                                                   .Contains(".dll") &&
                                                   x.TargetFramework.Identifier.ToLower() == nugetFramwork.Framework.ToLower())
                                     .Take(1);

                    foreach (var item in targetDlls)
                    {
                        if (item.EffectivePath.ToLower()
                            .Contains(".dll"))
                        {
                            var rawAssembly = item.GetStream()
                                              .ReadAllBytes();

                            var ad = AppDomain.CreateDomain("newDomian");
                            // Loader lives in another AppDomain
                            var loader = (Loader)ad.CreateInstanceAndUnwrap(typeof(Loader).Assembly.FullName, typeof(Loader).FullName);
                            loader.LoadAssembly(rawAssembly);
                            var dd  = loader.ExecuteStaticMethod("RestSharp.Validation.Ensure", "NotEmpty", "admin", "admin");
                            var dd1 = loader.ExecuteStaticMethod("RestSharp.SimpleJson", "EscapeToJavascriptString", "admin\\teset\\asdf\\sdaf");
                            richTextBox1.Text = $"RestSharp.SimpleJson.EscapeToJavascriptString(\"admin\\\\teset\\\\asdf\\\\sdaf\") -- {dd1}";
                            ad.DomainUnload  += OnAppDomainUnload;
                            AppDomain.Unload(ad);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
コード例 #22
0
        public static IEnumerable <string> GetCompatibleAssemblyReferences(this IPackageContentReaderWithRef package, FrameworkName target)
        {
            var framework = NuGetFramework.ParseFrameworkName(target.FullName, DefaultFrameworkNameProvider.Instance);
            var result    = NuGetFrameworkUtility.GetNearest(package.GetRefItems(), framework);

            if (result != null)
            {
                var items = result.Items.ToArray();
                if (items.Length != 0)
                {
                    return(items);
                }
            }
            result = NuGetFrameworkUtility.GetNearest(package.GetLibItems(), framework);
            return(result == null?Enumerable.Empty <string>() : result.Items);
        }
コード例 #23
0
        public static NuGetFramework GetTargetFrameworkMoniker(this ITaskItem taskItem)
        {
            NuGetFramework result        = null;
            var            metadataValue = taskItem.GetMetadata(Metadata.TargetFrameworkMoniker);

            if (!string.IsNullOrEmpty(metadataValue))
            {
                result = NuGetFramework.ParseFrameworkName(metadataValue, DefaultFrameworkNameProvider.Instance);
            }
            else
            {
                result = NuGetFramework.AnyFramework;
            }

            return(result);
        }
コード例 #24
0
        /// <inheritdoc />
        public Task <Dictionary <PackageIdentity, IEnumerable <string> > > ExtractPackage(
            IEnumerable <PackageIdentity> packages,
            string runtime,
            string frameworkName,
            string executionDir,
            string tmpDir,
            Action <string> logAction = null)
        {
            var framework = NuGetFramework.ParseFrameworkName(frameworkName, DefaultFrameworkNameProvider.Instance);

            Console.WriteLine(framework.ToString());
            return(packages.Install(
                       runtime,
                       framework,
                       this.url,
                       executionDir,
                       logAction));
        }
コード例 #25
0
        private NuGetFramework ProcessAssembly(Assembly assembly)
        {
            IList <CustomAttributeData> attributesData = assembly.GetCustomAttributesData();

            Specification.Id = assembly.FullName;
            NuGetFramework targetFramework = null;

            foreach (CustomAttributeData attributeData in attributesData)
            {
                if (attributeData.Constructor.DeclaringType == typeof(AssemblyCopyrightAttribute))
                {
                    Specification.Copyright = attributeData.ConstructorArguments.First().ToString().Trim(new[] { '"' });
                }
                else if (attributeData.Constructor.DeclaringType == typeof(AssemblyInformationalVersionAttribute))
                {
                    string[] version = attributeData.ConstructorArguments.First().ToString().Trim(new [] { '"' }).Split(new [] { '-' }, StringSplitOptions.RemoveEmptyEntries);
                    if (version.Length == 1)
                    {
                        Specification.Version = NuGetVersion.Parse(version[0]);
                    }
                    else
                    {
                        Specification.Version = new NuGetVersion(System.Version.Parse(version[0]), version[1]);
                    }
                }
                else if (attributeData.Constructor.DeclaringType ==
                         typeof(TargetFrameworkAttribute))
                {
                    targetFramework = NuGetFramework.ParseFrameworkName(
                        attributeData.NamedArguments.First().TypedValue.Value.ToString().Trim(new[] { '"' }),
                        DefaultFrameworkNameProvider.Instance);
                }
            }
            if (targetFramework == null)
            {
                throw new ArgumentException("no target framework identified in assembly " + assembly);
            }
            foreach (AssemblyName referencedAssembly in assembly.GetReferencedAssemblies())
            {
                Specification.FrameworkAssemblies.Add(referencedAssembly.FullName, targetFramework);
            }
            return(targetFramework);
        }
コード例 #26
0
        public NuGetPackageManager(ILogger logger, string packagesDirectory)
        {
            this.logger = logger;
            this.packagesDirectory = packagesDirectory;
            providers = new List<Lazy<INuGetResourceProvider>>();
            providers.AddRange(Repository.Provider.GetCoreV3()); // Add v3 API support

            const string nugetFile = "NuGet.Config";

            var nugetConfig = Path.Combine(packagesDirectory, nugetFile);
            if (!File.Exists(nugetConfig))
            {
                var nl = Environment.NewLine;

                File.WriteAllText(nugetConfig,
                    $"<?xml version=\"1.0\" encoding=\"utf-8\"?>{nl}"
                    + $"<configuration>{nl}"
                    + $"    <packageSources>{nl}"
                    + $"        <add key=\"rocketmod-hangar\" value=\"http://hangar.rocketmod.net/index.json\" protocolVersion=\"3\" />{nl}"
                    + $"        <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" protocolVersion=\"3\" />{nl}"
                    + $"    </packageSources>{nl}"
                    + $"</configuration>");
            }

            nugetSettings = Settings.LoadDefaultSettings(packagesDirectory, nugetFile, null);

            frameworkReducer = new FrameworkReducer();

            var frameworkName = Assembly.GetExecutingAssembly().GetCustomAttributes(true)
                                           .OfType<System.Runtime.Versioning.TargetFrameworkAttribute>()
                                           .Select(x => x.FrameworkName)
                                           .FirstOrDefault();

            currentFramework = frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider());

            packagePathResolver = new PackagePathResolver(packagesDirectory);
            packageResolver = new PackageResolver();
            loadedPackageAssemblies = new Dictionary<string, List<CachedNuGetAssembly>>();
            InstallAssemblyResolver();
        }
コード例 #27
0
        public FrameworkName GetNearest(FrameworkName targetFramework, IEnumerable <FrameworkName> fallbackTargetFrameworks, IEnumerable <FrameworkName> frameworks)
        {
            if (targetFramework == null)
            {
                throw new ArgumentNullException(nameof(targetFramework));
            }

            if (fallbackTargetFrameworks == null)
            {
                throw new ArgumentNullException(nameof(fallbackTargetFrameworks));
            }

            if (frameworks == null)
            {
                throw new ArgumentNullException(nameof(frameworks));
            }

            var nuGetTargetFramework = NuGetFramework.ParseFrameworkName(targetFramework.ToString(), DefaultFrameworkNameProvider.Instance);

            var nuGetFallbackTargetFrameworks = fallbackTargetFrameworks
                                                .Select(framework => NuGetFramework.ParseFrameworkName(framework.ToString(), DefaultFrameworkNameProvider.Instance))
                                                .ToList();

            if (nuGetFallbackTargetFrameworks.Any())
            {
                nuGetTargetFramework = new FallbackFramework(nuGetTargetFramework, nuGetFallbackTargetFrameworks);
            }

            var nuGetFrameworks = frameworks
                                  .Select(framework => NuGetFramework.ParseFrameworkName(framework.ToString(), DefaultFrameworkNameProvider.Instance));

            var reducer = new FrameworkReducer();
            var nearest = reducer.GetNearest(nuGetTargetFramework, nuGetFrameworks);

            if (nearest == null)
            {
                return(null);
            }

            return(new FrameworkName(nearest.DotNetFrameworkName));
        }
コード例 #28
0
        private static NuGetFramework TargetFrameworkName_ParserCore(string name)
        {
            var result = NuGetFramework.ParseFolder(name);

            if (!result.IsUnsupported)
            {
                return(result);
            }

            // Everything should be in the folder format, but fallback to
            // full parsing for legacy support.
            result = NuGetFramework.ParseFrameworkName(name, DefaultFrameworkNameProvider.Instance);

            if (!result.IsUnsupported)
            {
                return(result);
            }

            // For unknown frameworks return the name as is.
            return(new NuGetFramework(name, FrameworkConstants.EmptyVersion));
        }
コード例 #29
0
        internal static NuGetFramework ToNuGetFramework(this TargetFramework targetFramework)
        {
            string frameworkName = targetFramework switch
            {
                TargetFramework.NetStandard2_1 => ".NETStandard,Version=v2.1",
                TargetFramework.NetStandard2_0 => ".NETStandard,Version=v2.0",
                TargetFramework.NetCoreApp3_1 => ".NETCoreApp,Version=v3.1",
                TargetFramework.NetCoreApp3_0 => ".NETCoreApp,Version=v3.0",
                TargetFramework.NetCoreApp2_2 => ".NETCoreApp,Version=v2.2",
                TargetFramework.NetCoreApp2_1 => ".NETCoreApp,Version=v2.1",
                TargetFramework.NetCoreApp2_0 => ".NETCoreApp,Version=v2.0",
                TargetFramework.Net48 => ".NETFramework,Version=v4.8",
                TargetFramework.Net472 => ".NETFramework,Version=v4.7.2",
                TargetFramework.Net471 => ".NETFramework,Version=v4.7.1",
                TargetFramework.Net47 => ".NETFramework,Version=v4.7",
                _ => throw new ArgumentException(nameof(targetFramework))
            };

            return(NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider()));
        }
    }
コード例 #30
0
        internal PackageInstaller(IFileSystem fileSystem, AssemblyLoader assemblyLoader)
        {
            _fileSystem = fileSystem;

            // Get the current framework
            string frameworkName = Assembly.GetExecutingAssembly().GetCustomAttributes(true)
                                   .OfType <System.Runtime.Versioning.TargetFrameworkAttribute>()
                                   .Select(x => x.FrameworkName)
                                   .FirstOrDefault();

            CurrentFramework = frameworkName == null
                ? NuGetFramework.AnyFramework
                : NuGetFramework.ParseFrameworkName(frameworkName, new DefaultFrameworkNameProvider());

            Settings = global::NuGet.Configuration.Settings.LoadDefaultSettings(_fileSystem.RootPath.FullPath, null, new MachineWideSettings());
            IPackageSourceProvider packageSourceProvider = new PackageSourceProvider(Settings);

            SourceRepositoryProvider = new WyamSourceRepositoryProvider(packageSourceProvider);
            _nuGetProject            = new WyamFolderNuGetProject(fileSystem, assemblyLoader, CurrentFramework, GetAbsolutePackagesPath().FullPath);
            PackageManager           = new NuGetPackageManager(SourceRepositoryProvider, Settings, GetAbsolutePackagesPath().FullPath)
            {
                PackagesFolderNuGetProject = _nuGetProject
            };
        }