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); } }
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); } }