예제 #1
0
 public void Execute()
 {
     Debug.Assert(savedStates == null);
     if (savedStates != null)
     {
         throw new InvalidOperationException();
     }
     this.savedStates = new SavedState[this.nodes.Length];
     for (int i = 0; i < nodes.Length; i++)
     {
         var node = nodes[i];
         savedStates[i] = new SavedState();
         var  savedState = savedStates[i];
         var  module     = node.LoadedAssembly.ModuleDefinition;
         bool b          = module != null && module.Assembly != null &&
                           module.Assembly.Modules.Count == 1 &&
                           module.Assembly.ManifestModule == module;
         Debug.Assert(b);
         if (!b)
         {
             throw new InvalidOperationException();
         }
         node.EnsureChildrenFiltered();
         savedState.AssemblyDef = module.Assembly;
         module.Assembly.Modules.Remove(module);
         savedState.ModuleKind = module.Kind;
         ModuleUtils.WriteNewModuleKind(module, ModuleKind.NetModule, out savedState.Characteristics);
         savedState.ModuleNode = node.OnConvertedToNetModule();
     }
 }
예제 #2
0
        public void Execute()
        {
            Debug.Assert(savedStates == null);
            if (savedStates != null)
            {
                throw new InvalidOperationException();
            }
            savedStates = new SavedState[nodes.Length];
            for (int i = 0; i < nodes.Length; i++)
            {
                var node = nodes[i];
                savedStates[i] = new SavedState();
                var savedState = savedStates[i];

                int  index = node.TreeNode.Parent.Children.IndexOf(node.TreeNode);
                bool b     = index >= 0;
                Debug.Assert(b);
                if (!b)
                {
                    throw new InvalidOperationException();
                }
                savedState.ModuleNode = (ModuleDocumentNode)node.TreeNode.Children.First(a => a.Data is ModuleDocumentNode).Data;
                node.TreeNode.Children.Remove(savedState.ModuleNode.TreeNode);
                node.TreeNode.Parent.Children[index] = savedState.ModuleNode.TreeNode;

                var module = node.Document.ModuleDef;
                b = module != null && module.Assembly != null &&
                    module.Assembly.Modules.Count == 1 &&
                    module.Assembly.ManifestModule == module;
                Debug.Assert(b);
                if (!b)
                {
                    throw new InvalidOperationException();
                }
                node.TreeNode.EnsureChildrenLoaded();
                savedState.AssemblyDef = module.Assembly;
                module.Assembly.Modules.Remove(module);
                savedState.ModuleKind = module.Kind;
                ModuleUtils.WriteNewModuleKind(module, ModuleKind.NetModule, out savedState.Characteristics);
            }
        }