private void MarkUnResolvable(List <Interface2> bundles, params Interface2[] unresolvedNodes) { Action <Interface2> action = null; foreach (Interface2 unresolvedNode in unresolvedNodes) { this.LogUnresolvedNode(unresolvedNode); List <Interface2> referencedBundles = this.GetReferencedBundles(bundles, unresolvedNode); referencedBundles.RemoveAll(referencedNode => !referencedNode.IsResolvable); if (action == null) { action = delegate(Interface2 referencedNode) { referencedNode.IsResolvable = false; this.LogUnresolvedNode(referencedNode, unresolvedNode); }; } referencedBundles.ForEach(action); IFragmentBundleMetadataNode fragment = unresolvedNode as IFragmentBundleMetadataNode; if ((fragment != null) && (fragment.HostNode != null)) { fragment.HostNode.DetachFagment(fragment); this.LogUnresolvedNode(fragment); } this.MarkUnResolvable(bundles, referencedBundles.ToArray()); } }
public List <IAssemblyMetadataNode> DetachFagment(IFragmentBundleMetadataNode fragment) { if (fragment.HostNode != this) { throw new InvalidOperationException("A framgent node can only be detached from it's host node"); } fragment.HostNode = null; this.FragmentNodes.Remove(fragment); base.ConstraintResolver.ResolvedAssemblyMetadataNodes.RemoveAll(a => fragment.SharedAssemblyNodes.Contains(a)); return(new List <IAssemblyMetadataNode>(fragment.SharedAssemblyNodes)); }
public List <IAssemblyMetadataNode> AttachFragment(IFragmentBundleMetadataNode fragment) { AssertUtility.ArgumentNotNull(fragment, "fragement"); if (!this.FragmentNodes.Contains(fragment)) { fragment.HostNode = this; base.ConstraintResolver.ResolvedAssemblyMetadataNodes.AddRange(fragment.SharedAssemblyNodes); base.ConstraintResolver.ResolvedAssemblyMetadataNodes.AddRange(fragment.PrivateAssemblyNodes); this.FragmentNodes.Add(fragment); this.SortByBundleID <IFragmentBundleMetadataNode>(this.FragmentNodes, true); } return(null); }
private void LogUnresolvedNode(IFragmentBundleMetadataNode unresolvedNode) { FileLogUtility.Inform(string.Format(Messages.FragmentDetachedForHostNotResolved, new object[] { unresolvedNode.SymbolicName, unresolvedNode.Version, unresolvedNode.HostNode.SymbolicName, unresolvedNode.HostNode.Version })); }