Esempio n. 1
0
        private async Task InstallPackageInternalAsync(
            PackageIdentity identity,
            IEnumerable <string> assembliesToInstall,
            Framework targetFramework,
            ISet <PackageIdentity> installingPackagesContainer,
            ISet <PackageIdentity> successInstalledPackagesContainer)
        {
            if (!installingPackagesContainer.Contains(identity))
            {
                installingPackagesContainer.Add(identity);
            }

            if (IsPackageInstalled(identity.Id))
            {
                successInstalledPackagesContainer.Add(identity);
                return;
            }

            var info = await RequireLocalPackageInfo(identity);

            var dependenciesGroup = info.Dependencies?.FirstOrDefault(d => d.TargetFramework.Equals(targetFramework));

            if (dependenciesGroup != null)
            {
                foreach (var dependencyIdentity in dependenciesGroup.Dependencies)
                {
                    await InstallPackageInternalAsync(dependencyIdentity, assembliesToInstall, targetFramework,
                                                      installingPackagesContainer,
                                                      successInstalledPackagesContainer);
                }
            }

            var path = _localPackagesConfigService.GetPackagePath(identity);

            if (path == null)
            {
                LogHelper.LogWarning($"Package {identity.Id} {identity.Version} not downloaded");
                return;
            }

            var dlls = _dllFilesService.CopyDlls(identity, targetFramework);

            _dllFilesService.ConfigureDlls(dlls);
            var dllNames          = dlls.Select(Path.GetFileName);
            var changedAssemblies = await _assembliesService.AddDllReferencesAsync(assembliesToInstall, dllNames);

            _installedPackagesConfigService.AddInstalledPackageOrUpdate(identity, changedAssemblies.ToList(), dllNames.ToList());
            successInstalledPackagesContainer.Add(identity);
        }