예제 #1
0
    public static void Main()
    {
        IServiceProvider serviceProvider = new ApplicationManager(null);

        IAssemblyManager assemblyManager = (IAssemblyManager)serviceProvider.GetService(typeof(IAssemblyManager));

        IAssembly assembly = assemblyManager.LoadFile(typeof(CodeModelExample).Module.FullyQualifiedName);

        Console.WriteLine("Assembly: " + assembly.ToString());

        foreach (IModule module in assembly.Modules)
        {
            Console.WriteLine("Module: " + module.Name);

            foreach (ITypeDeclaration typeDeclaration in module.Types)
            {
                Console.WriteLine("Type: " + typeDeclaration.Namespace + "." + typeDeclaration.Name);

                foreach (IMethodDeclaration methodDeclaration in typeDeclaration.Methods)
                {
                    Console.WriteLine("Method: " + methodDeclaration);

                    IMethodBody methodBody = methodDeclaration.Body as IMethodBody;
                    if (methodBody != null)
                    {
                        foreach (IInstruction instruction in methodBody.Instructions)
                        {
                            Console.Write("L" + instruction.Offset.ToString("X4", CultureInfo.InvariantCulture));
                            Console.Write(": ");
                            Console.Write(InstructionTable.GetInstructionName(instruction.Code));

                            if (instruction.Value != null)
                            {
                                Console.Write(" ");

                                if (instruction.Value is string)
                                {
                                    Console.Write("\"");
                                }

                                Console.Write(instruction.Value.ToString());

                                if (instruction.Value is string)
                                {
                                    Console.Write("\"");
                                }
                            }


                            Console.WriteLine();
                        }
                    }
                }
            }
        }

        assemblyManager.Unload(assembly);
    }
        private void ProcessCommandLineArguments()
        {
            CommandLineManager commandLineManger = new CommandLineManager();

            if (commandLineManger.IsArgumentPresent("assemblyListFile"))
            {
                string fileName = commandLineManger.GetArgument("assemblyListFile");
                if (false == File.Exists(fileName))
                {
                    MessageBox.Show(String.Format("Could not find file {0}", fileName));
                    return;
                }

                AssemblyListFile file             = new AssemblyListFile(fileName);
                string[]         assembliesToLoad = file.Assemblies;

                if (file.RemoveExisitingAssemblies)
                {
                    // Remove all exisiting assemblies
                    for (int i = assemblyManager.Assemblies.Count - 1; i >= 0; i--)
                    {
                        assemblyManager.Unload(assemblyManager.Assemblies[i]);
                    }
                }

                foreach (string assemblyFile in assembliesToLoad)
                {
                    assemblyManager.LoadFile(assemblyFile);
                }

                if (file.AutomaticallyResolveReferences)
                {
                    ResolveAllReferences(file.SupressResolveUI);
                }
            }

            if (commandLineManger.IsArgumentPresent("RegisterAssemblyListFileType"))
            {
                DoRegisterFileTypeAssociation();
            }

            if (commandLineManger.IsArgumentPresent("UnregisterAssemblyListFileType"))
            {
                DoUnregisterFileTypeAssociation();
            }
        }