Пример #1
0
        private IEnumerable <PackageFragmentValidationResult> LoadPackageFramentUninstallers(XElement packageFragmentInstallersElement)
        {
            PackageUninstallerContext packageUninstallerContext = null;

            Exception exception = null;

            try
            {
                string packageDirectory = Path.GetDirectoryName(ZipFilename);

                packageUninstallerContext = new PackageUninstallerContext(new ZipFileSystem(this.ZipFilename), packageDirectory, this.PackageInformation);
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            if (exception != null)
            {
                yield return(new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception));

                yield break;
            }


            foreach (XElement element in packageFragmentInstallersElement.Elements(XmlUtils.GetXName(PackageSystemSettings.XmlNamespace, PackageSystemSettings.PackageFragmentUninstallersAddElementName)))
            {
                XAttribute uninstallerTypeAttribute = element.Attribute(PackageSystemSettings.UninstallerTypeAttributeName);
                if (uninstallerTypeAttribute == null)
                {
                    yield return(new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, string.Format("Missing attribute '{0}'", PackageSystemSettings.UninstallerTypeAttributeName), element)); continue;
                }

                Type uninstallerType = TypeManager.TryGetType(uninstallerTypeAttribute.Value);
                if (uninstallerType == null)
                {
                    yield return(new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, string.Format("Could not find uninstall fragment type '{0}'", uninstallerTypeAttribute.Value), uninstallerTypeAttribute)); continue;
                }

                exception = null;
                IPackageFragmentUninstaller packageFragmentUninstaller = null;
                try
                {
                    packageFragmentUninstaller = Activator.CreateInstance(uninstallerType) as IPackageFragmentUninstaller;
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
                if (exception != null)
                {
                    yield return(new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception));

                    continue;
                }
                if (packageFragmentUninstaller == null)
                {
                    yield return(new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, string.Format("The type '{0}' does not implement {1}", uninstallerTypeAttribute.Value, typeof(IPackageFragmentUninstaller)), uninstallerTypeAttribute)); continue;
                }

                try
                {
                    packageFragmentUninstaller.Initialize(packageUninstallerContext, element.Descendants(), element);
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
                if (exception != null)
                {
                    yield return(new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception));

                    continue;
                }

                _packageFramentUninstallers.Add(packageFragmentUninstaller);
            }
        }
Пример #2
0
        private IEnumerable<PackageFragmentValidationResult> LoadPackageFramentUninstallers(XElement packageFragmentInstallersElement)
        {
            PackageUninstallerContext packageUninstallerContext = null;

            Exception exception = null;
            try
            {
                string packageDirectory = Path.GetDirectoryName(ZipFilename);

                packageUninstallerContext = new PackageUninstallerContext(new ZipFileSystem(this.ZipFilename), packageDirectory, this.PackageInformation);
            }
            catch (Exception ex)
            {
                exception = ex;                
            }

            if (exception != null)
            {
                yield return new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception);
                yield break;
            }

            
            foreach (XElement element in packageFragmentInstallersElement.Elements(XmlUtils.GetXName(PackageSystemSettings.XmlNamespace, PackageSystemSettings.PackageFragmentUninstallersAddElementName)))
            {
                XAttribute uninstallerTypeAttribute = element.Attribute(PackageSystemSettings.UninstallerTypeAttributeName);
                if (uninstallerTypeAttribute == null) { yield return new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, string.Format("Missing attribute '{0}'", PackageSystemSettings.UninstallerTypeAttributeName), element); continue; }

                Type uninstallerType = TypeManager.TryGetType(uninstallerTypeAttribute.Value);
                if (uninstallerType == null) { yield return new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, string.Format("Could not find uninstall fragment type '{0}'", uninstallerTypeAttribute.Value), uninstallerTypeAttribute); continue; }

                exception = null;
                IPackageFragmentUninstaller packageFragmentUninstaller = null;
                try
                {
                    packageFragmentUninstaller = Activator.CreateInstance(uninstallerType) as IPackageFragmentUninstaller;
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
                if (exception != null)
                {
                    yield return new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception);
                    continue;
                }
                if (packageFragmentUninstaller == null) { yield return new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, string.Format("The type '{0}' does not implement {1}", uninstallerTypeAttribute.Value, typeof(IPackageFragmentUninstaller)), uninstallerTypeAttribute); continue; }

                try
                {
                    packageFragmentUninstaller.Initialize(packageUninstallerContext, element.Descendants(), element);
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
                if (exception != null)
                {
                    yield return new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception);
                    continue;
                }

                _packageFramentUninstallers.Add(packageFragmentUninstaller);
            }
        }