コード例 #1
0
        public IAssembly FindAssembly(string assemblyFile)
        {
            if (File.Exists(assemblyFile))
            {
                //Mono.Cecil.AssemblyDefinition ad = Mono.Cecil.AssemblyDefinition.ReadAssembly(assemblyFile);
                //string fullName = ad.Name.FullName;

                string fullName;
                if (PathUtils.IsNetModule(assemblyFile))
                {
                    fullName = assemblyFile;
                }
                else
                {
                    AssemblyName an = AssemblyName.GetAssemblyName(assemblyFile);
                    fullName = an.FullName;
                }

                for (int i = 0; i < this.Assemblies.Count; i++)
                {
                    IAssembly a = this.Assemblies[i];
                    if (a.Location.Equals(assemblyFile, StringComparison.OrdinalIgnoreCase) ||
                        fullName.Equals(a.ToString()))
                    {
                        return(a);
                    }
                }
            }
            return(null);
        }
コード例 #2
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);
    }
コード例 #3
0
 public override void VisitAssembly(IAssembly value)
 {
     if (_configuration["ShowNamespaceBody"] == "true")
     {
         base.VisitAssembly(value);
     }
     else
     {
         _formatter.Write("# Assembly ");
         _formatter.WriteDeclaration(value.Name);
         _formatter.WriteProperty("Name", value.ToString());
         _formatter.WriteProperty("Location", value.Location);
     }
 }
コード例 #4
0
        private IncludeStatus GetIncludeStatus(IAssembly assembly)
        {
            ThinAssembly modelAssembly;

            if (!_rootAssemblies.TryGetValue(assembly, out modelAssembly))
            {
                if (_depot.ContainsAssembly(assembly))
                {
                    return(_closureStatus);
                }

                throw new Exception("could not find IncludeStatus for assembly " + assembly.ToString());
            }
            return(modelAssembly.IncludeStatus);
        }
コード例 #5
0
ファイル: Implementation.cs プロジェクト: dsgouda/buildtools
        private IncludeStatus GetIncludeStatus(IAssembly assembly)
        {
            ThinAssembly modelAssembly;
            if (!_rootAssemblies.TryGetValue(assembly, out modelAssembly))
            {
                if (_depot.ContainsAssembly(assembly))
                    return _closureStatus;

                throw new Exception("could not find IncludeStatus for assembly " + assembly.ToString());
            }
            return modelAssembly.IncludeStatus;
        }
コード例 #6
0
        internal static string BuildTypeNameInternal(this IType target, bool shortFormGeneric = false, bool numericTypeParams = false, TypeParameterDisplayMode typeParameterDisplayMode = TypeParameterDisplayMode.SystemStandard)
        {
            switch (target.ElementClassification)
            {
            case TypeElementClassification.None:
                if (target is IGenericParameter)
                {
                    if (numericTypeParams)
                    {
                        var genericParameter = (IGenericParameter)target;
                        if (genericParameter.Parent is IType)
                        {
                            return(string.Format("!{0}", genericParameter.Position));
                        }
                        else
                        {
                            return(string.Format("!!{0}", genericParameter.Position));
                        }
                    }
                    else
                    {
                        return(((IGenericParameter)(target)).Name);
                    }
                }
                string targetName    = target.Name;
                var    genericTarget = target as IGenericType;
                if (typeParameterDisplayMode == TypeParameterDisplayMode.SystemStandard && genericTarget != null && genericTarget.IsGenericConstruct)
                {
                    int count = 0;
                    if (genericTarget.ElementClassification == TypeElementClassification.None)
                    {
                        if ((count = genericTarget.TypeParameters.Count) > 0)
                        {
                            targetName += '`' + count.ToString();
                        }
                    }
                    else if (genericTarget.ElementClassification == TypeElementClassification.GenericTypeDefinition)
                    {
                        var genericElementType = genericTarget.ElementType as IGenericType;
                        if (genericElementType != null)
                        {
                            if ((count = genericElementType.TypeParameters.Count) > 0)
                            {
                                targetName += '`' + count.ToString();
                            }
                        }
                        else
                        {
                            targetName += "`?";
                        }
                    }
                }
                if (target.Parent != null && !(target.Parent is INamespaceDeclaration ||
                                               target.Parent is IAssembly))
                {
                    return(string.Format("{0}+{1}", target.Parent.BuildVariedName(shortFormGeneric, numericTypeParams, typeParameterDisplayMode), targetName));
                }
                else if (!string.IsNullOrEmpty(target.NamespaceName))
                {
                    return(string.Format("{0}.{1}", target.NamespaceName, targetName));
                }
                else
                {
                    return(targetName);
                }

            case TypeElementClassification.Array:
                if (target is IArrayType)
                {
                    var arrayVariant = target as IArrayType;
                    if (arrayVariant.Flags == ArrayFlags.Vector)
                    {
                        return(string.Format("{0}[]", target.ElementType.BuildTypeName(shortFormGeneric, numericTypeParams)));
                    }
                    else if ((arrayVariant.Flags & ArrayFlags.DimensionLengths) == ArrayFlags.DimensionLengths || (arrayVariant.Flags & ArrayFlags.DimensionLowerBounds) == ArrayFlags.DimensionLowerBounds)
                    {
                        var lengths         = arrayVariant.Lengths;
                        var lowerBounds     = arrayVariant.LowerBounds;
                        int lengthCount     = 0,
                            lowerBoundCount = 0;
                        if (lengths != null)
                        {
                            lengthCount = lengths.Count;
                        }
                        if (lowerBounds != null)
                        {
                            lowerBoundCount = lowerBounds.Count;
                        }
                        StringBuilder sb    = new StringBuilder();
                        bool          first = true;
                        for (int i = 0; i < arrayVariant.ArrayRank; i++)
                        {
                            if (first)
                            {
                                first = false;
                            }
                            else
                            {
                                sb.Append(",");
                            }
                            bool addedDots;
                            if (addedDots = (i < lowerBoundCount))
                            {
                                sb.AppendFormat("{0}...", lowerBounds[i]);
                            }
                            if (i < lengthCount)
                            {
                                if (addedDots)
                                {
                                    sb.Append(lowerBounds[i] + lengths[i] - 1);
                                }
                                else
                                {
                                    sb.AppendFormat("0...{0}", lengths[i] - 1);
                                }
                            }
                        }
                        return(string.Format("{0}[{1}]", target.ElementType.BuildTypeName(shortFormGeneric, numericTypeParams), sb.ToString()));
                    }
                    else
                    {
                        return(string.Format("{0}[{1}]", target.ElementType.BuildTypeName(shortFormGeneric, numericTypeParams), ','.Repeat(arrayVariant.ArrayRank - 1)));
                    }
                }
                else
                {
                    return(string.Format("{0}[?,...]", target.ElementType.BuildTypeName(shortFormGeneric, numericTypeParams)));
                }

            case TypeElementClassification.Nullable:
                return(string.Format("{0}?", target.ElementType.BuildTypeName(shortFormGeneric, numericTypeParams)));

            case TypeElementClassification.Pointer:
                return(string.Format("{0}*", target.ElementType.BuildTypeName(shortFormGeneric, numericTypeParams)));

            case TypeElementClassification.Reference:
                return(string.Format("{0}&", target.ElementType.BuildTypeName(shortFormGeneric, numericTypeParams)));

            case TypeElementClassification.GenericTypeDefinition:
                if (target is IGenericType)
                {
                    /*Apply the rules across the generic parameters.  With an alternate route for numeric identity. */
                    return(string.Format("{0}{2}{1}{3}", target.ElementType.BuildTypeName(typeParameterDisplayMode: typeParameterDisplayMode), string.Join(",",
                                                                                                                                                           ((IGenericType)(target)).GenericParameters.OnAll(genericReplacement =>
                    {
                        if (shortFormGeneric)
                        {
                            if (genericReplacement.IsGenericTypeParameter)
                            {
                                if (numericTypeParams)
                                {
                                    var genericParameterReplacement = (IGenericParameter)genericReplacement;
                                    if (genericParameterReplacement.Parent is IType)
                                    {
                                        return string.Format("!{0}", genericParameterReplacement.Position);
                                    }
                                    else
                                    {
                                        return string.Format("!!{0}", genericParameterReplacement.Position);
                                    }
                                }
                                else
                                {
                                    return genericReplacement.Name;
                                }
                            }
                            else
                            {
                                return genericReplacement.BuildTypeName(shortFormGeneric, true);
                            }
                        }
                        else if (genericReplacement.IsGenericTypeParameter)
                        {
                            if (numericTypeParams && typeParameterDisplayMode != TypeParameterDisplayMode.CommentStandard)
                            {
                                var genericParameterReplacement = (IGenericParameter)genericReplacement;
                                if (genericParameterReplacement.Parent is IType)
                                {
                                    return string.Format("[!{0}]", genericParameterReplacement.Position);
                                }
                                else
                                {
                                    return string.Format("[!!{0}]", genericParameterReplacement.Position);
                                }
                            }
                            else
                            {
                                return string.Format("[{0}]", genericReplacement.Name);
                            }
                        }
                        else if (genericReplacement.Assembly == null)
                        {
                            return genericReplacement.FullName;
                        }
                        else if (typeParameterDisplayMode == TypeParameterDisplayMode.CommentStandard)
                        {
                            return genericReplacement.BuildTypeName(shortFormGeneric, numericTypeParams, typeParameterDisplayMode);
                        }
                        else
                        {
                            try
                            {
                                IAssembly replacementAssembly = genericReplacement.Assembly;
                                return string.Format("[{0}, {1}]", genericReplacement.FullName, replacementAssembly.ToString());
                            }
                            //For Symbol types.
                            catch (NotSupportedException)
                            {
                                return string.Format("{0}", genericReplacement.FullName);
                            }
                        }
                    }).ToArray()), GetGenericOpenGlyph(typeParameterDisplayMode), GetGenericCloseGlyph(typeParameterDisplayMode)));
                }
                else     /* If they report they're generic, but do not implement the proper interface, we're somewhat out of luck. */
                {
                    return(string.Format("{0}{1}[?],...{2}", target.ElementType.BuildTypeName(true, numericTypeParams, typeParameterDisplayMode), GetGenericOpenGlyph(typeParameterDisplayMode), GetGenericCloseGlyph(typeParameterDisplayMode)));
                }
            }
            return(null);
        }
コード例 #7
0
            public void WriteAssembly(IAssembly value)
            {
                this.formatter.Write("// JS Assembly");
                this.formatter.Write(" ");
                this.formatter.WriteDeclaration(value.Name);

                if (value.Version != null)
                {
                    this.formatter.Write(", ");
                    this.formatter.Write("Version");
                    this.formatter.Write(" ");
                    this.formatter.Write(value.Version.ToString());
                }

                this.formatter.WriteLine();

                if ((this.configuration["ShowCustomAttributes"] == "true") && (value.Attributes.Count != 0))
                {
                    this.formatter.WriteLine();
                    this.WriteCustomAttributeList(value, this.formatter);
                    this.formatter.WriteLine();
                }

                this.formatter.WriteProperty("Location", value.Location);
                this.formatter.WriteProperty("Name", value.ToString());

                switch (value.Type)
                {
                    case AssemblyType.Application:
                        this.formatter.WriteProperty("Type", "Windows Application");
                        break;

                    case AssemblyType.Console:
                        this.formatter.WriteProperty("Type", "Console Application");
                        break;

                    case AssemblyType.Library:
                        this.formatter.WriteProperty("Type", "Library");
                        break;
                }
            }