Ejemplo n.º 1
0
        public SequencePoint[] GetSequencePointsForMethod(MethodNode method)
        {
            var dispenser = new MetaDataDispenser();

            var assemblyFile = method.Method.DeclaringType.Assembly.Location;

            object importer;
            ((IMetaDataDispenser)dispenser).OpenScope(assemblyFile, 0, ImporterIid, out importer);

            ISymbolReader reader;

            var searchPath = Path.GetDirectoryName(assemblyFile);

            if (binder.TryGetReaderForFile(importer, assemblyFile, searchPath, out reader) == LoadSymbolsResult.Success)
            {
                var methodReader = reader.GetMethod(new SymbolToken(method.Method.MetadataToken));

                return methodReader.GetSequencePoints();
            }
            else
            {
                return new[] {SequencePoint.Empty};
            }
        }
Ejemplo n.º 2
0
        internal static IEnumerable GetTypeRefNames(string assemblyLocation)
        {
            IMetaDataDispenser metaDataDispenser = new MetaDataDispenser() as IMetaDataDispenser;

            if (metaDataDispenser == null)
            {
                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataDispenser"));
            }

            Guid   guidMetaDataImport = new Guid(Guids.IID_IMetaDataImport);
            object metaDataImportObj  = null;

            NativeMethods.ThrowOnFailure(metaDataDispenser.OpenScope(assemblyLocation, 0, ref guidMetaDataImport, out metaDataImportObj));
            IMetaDataImport metaDataImport = metaDataImportObj as IMetaDataImport;

            if (metaDataImport == null)
            {
                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataImport"));
            }

            IntPtr enumHandle = new IntPtr();

            uint[] typeRefs     = new uint[20];
            uint   typeRefCount = 0;

            try
            {
                do
                {
                    NativeMethods.ThrowOnFailure((metaDataImport.EnumTypeRefs(ref enumHandle, typeRefs, (uint)typeRefs.Length, ref typeRefCount)));
                    for (int typeRefIndex = 0; typeRefIndex < typeRefCount; typeRefIndex++)
                    {
                        IntPtr typeRefNamePtr = IntPtr.Zero;
                        uint   typeRefNameLength;
                        uint   resolutionScopeToken;

                        NativeMethods.ThrowOnFailure(metaDataImport.GetTypeRefProps(typeRefs[typeRefIndex], out resolutionScopeToken, typeRefNamePtr, 0, out typeRefNameLength));
                        if (typeRefNameLength > 0)
                        {
                            string typeRefName = String.Empty;
                            typeRefNamePtr = Marshal.AllocCoTaskMem((int)(2 * (typeRefNameLength + 1)));
                            try
                            {
                                NativeMethods.ThrowOnFailure(metaDataImport.GetTypeRefProps(typeRefs[typeRefIndex], out resolutionScopeToken, typeRefNamePtr, typeRefNameLength, out typeRefNameLength));
                            }
                            finally
                            {
                                typeRefName = Marshal.PtrToStringUni(typeRefNamePtr);
                                Marshal.FreeCoTaskMem(typeRefNamePtr);
                            }

                            IMetaDataAssemblyImport metaDataAssemblyImport = metaDataImportObj as IMetaDataAssemblyImport;
                            if (metaDataAssemblyImport == null)
                            {
                                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataAssemblyImport"));
                            }

                            if (TokenTypeFromToken(resolutionScopeToken) == MetadataTokenType.AssemblyRef)
                            {
                                AssemblyMetadata assemblyMetadata;
                                IntPtr           publicKeyOrToken = IntPtr.Zero;
                                uint             publicKeyOrTokenSize;
                                IntPtr           assemblyName = IntPtr.Zero;
                                uint             assemblyNameSize;
                                IntPtr           hashValueBlob = IntPtr.Zero;
                                uint             hashValueSize;
                                uint             assemblyRefFlags;

                                NativeMethods.ThrowOnFailure(metaDataAssemblyImport.GetAssemblyRefProps(resolutionScopeToken, out publicKeyOrToken, out publicKeyOrTokenSize, assemblyName, 0, out assemblyNameSize, out assemblyMetadata, out hashValueBlob, out hashValueSize, out assemblyRefFlags));

                                if (assemblyNameSize > 0)
                                {
                                    assemblyName = Marshal.AllocCoTaskMem((int)(2 * (assemblyNameSize + 1)));
                                }

                                if (assemblyMetadata.localeSize > 0)
                                {
                                    assemblyMetadata.locale = Marshal.AllocCoTaskMem((int)(2 * (assemblyMetadata.localeSize + 1)));
                                }

                                try
                                {
                                    if (assemblyNameSize > 0 || assemblyMetadata.localeSize > 0)
                                    {
                                        NativeMethods.ThrowOnFailure(metaDataAssemblyImport.GetAssemblyRefProps(resolutionScopeToken, out publicKeyOrToken, out publicKeyOrTokenSize, assemblyName, assemblyNameSize, out assemblyNameSize, out assemblyMetadata, out hashValueBlob, out hashValueSize, out assemblyRefFlags));
                                    }

                                    String publicKeyString = String.Empty;
                                    for (int pos = 0; pos < publicKeyOrTokenSize; pos++)
                                    {
                                        publicKeyString += String.Format("{0}", Marshal.ReadByte(publicKeyOrToken, pos).ToString("x2"));
                                    }

                                    yield return(String.Format("{0}, {1}, Version={2}.{3}.{4}.{5}, Culture={6}, PublicKeyToken={7}", typeRefName, Marshal.PtrToStringUni(assemblyName), assemblyMetadata.majorVersion, assemblyMetadata.minorVersion, assemblyMetadata.buildNumber, assemblyMetadata.revisionNumber, String.IsNullOrEmpty(Marshal.PtrToStringUni(assemblyMetadata.locale)) ? "neutral" : Marshal.PtrToStringUni(assemblyMetadata.locale), String.IsNullOrEmpty(publicKeyString) ? "null" : publicKeyString));
                                }
                                finally
                                {
                                    if (assemblyName != IntPtr.Zero && assemblyNameSize > 0)
                                    {
                                        Marshal.FreeCoTaskMem(assemblyName);
                                        assemblyName = IntPtr.Zero;
                                    }

                                    if (assemblyMetadata.locale != IntPtr.Zero && assemblyMetadata.localeSize > 0)
                                    {
                                        Marshal.FreeCoTaskMem(assemblyMetadata.locale);
                                        assemblyMetadata.locale = IntPtr.Zero;
                                    }
                                }
                            }
                        }
                    }
                }while (typeRefCount > 0);
            }
            finally
            {
                metaDataImport.CloseEnum(enumHandle);
            }
            yield break;
        }
Ejemplo n.º 3
0
        internal static IEnumerable GetTypeRefNames(string assemblyLocation)
        {
            IMetaDataDispenser metaDataDispenser = new MetaDataDispenser() as IMetaDataDispenser;

            if (metaDataDispenser == null)
            {
                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataDispenser"));
            }

            Guid guidMetaDataImport = new Guid(Guids.IID_IMetaDataImport);
            object metaDataImportObj = null;

            NativeMethods.ThrowOnFailure(metaDataDispenser.OpenScope(assemblyLocation, 0, ref guidMetaDataImport, out metaDataImportObj));
            IMetaDataImport metaDataImport = metaDataImportObj as IMetaDataImport;
            if (metaDataImport == null)
            {
                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataImport"));
            }

            IntPtr enumHandle = new IntPtr();
            uint[] typeRefs = new uint[20];
            uint typeRefCount = 0;

            try
            {
                do
                {
                    NativeMethods.ThrowOnFailure((metaDataImport.EnumTypeRefs(ref enumHandle, typeRefs, (uint)typeRefs.Length, ref typeRefCount)));
                    for (int typeRefIndex = 0; typeRefIndex < typeRefCount; typeRefIndex++)
                    {
                        IntPtr typeRefNamePtr = IntPtr.Zero;
                        uint typeRefNameLength;
                        uint resolutionScopeToken;

                        NativeMethods.ThrowOnFailure(metaDataImport.GetTypeRefProps(typeRefs[typeRefIndex], out resolutionScopeToken, typeRefNamePtr, 0, out typeRefNameLength));
                        if (typeRefNameLength > 0)
                        {
                            string typeRefName = String.Empty;
                            typeRefNamePtr = Marshal.AllocCoTaskMem((int)(2 * (typeRefNameLength + 1)));
                            try
                            {
                                NativeMethods.ThrowOnFailure(metaDataImport.GetTypeRefProps(typeRefs[typeRefIndex], out resolutionScopeToken, typeRefNamePtr, typeRefNameLength, out typeRefNameLength));
                            }
                            finally
                            {
                                typeRefName = Marshal.PtrToStringUni(typeRefNamePtr);
                                Marshal.FreeCoTaskMem(typeRefNamePtr);
                            }

                            IMetaDataAssemblyImport metaDataAssemblyImport = metaDataImportObj as IMetaDataAssemblyImport;
                            if (metaDataAssemblyImport == null)
                            {
                                throw new InvalidOperationException(String.Format(SR.GetString(SR.Error_MetaDataInterfaceMissing), assemblyLocation, "IMetaDataAssemblyImport"));
                            }

                            if (TokenTypeFromToken(resolutionScopeToken) == MetadataTokenType.AssemblyRef)
                            {
                                AssemblyMetadata assemblyMetadata;
                                IntPtr publicKeyOrToken = IntPtr.Zero;
                                uint publicKeyOrTokenSize;
                                IntPtr assemblyName = IntPtr.Zero;
                                uint assemblyNameSize;
                                IntPtr hashValueBlob = IntPtr.Zero;
                                uint hashValueSize;
                                uint assemblyRefFlags;

                                NativeMethods.ThrowOnFailure(metaDataAssemblyImport.GetAssemblyRefProps(resolutionScopeToken, out publicKeyOrToken, out publicKeyOrTokenSize, assemblyName, 0, out assemblyNameSize, out assemblyMetadata, out hashValueBlob, out hashValueSize, out assemblyRefFlags));

                                if (assemblyNameSize > 0)
                                    assemblyName = Marshal.AllocCoTaskMem((int)(2 * (assemblyNameSize + 1)));

                                if (assemblyMetadata.localeSize > 0)
                                    assemblyMetadata.locale = Marshal.AllocCoTaskMem((int)(2 * (assemblyMetadata.localeSize + 1)));

                                try
                                {
                                    if (assemblyNameSize > 0 || assemblyMetadata.localeSize > 0)
                                    {
                                        NativeMethods.ThrowOnFailure(metaDataAssemblyImport.GetAssemblyRefProps(resolutionScopeToken, out publicKeyOrToken, out publicKeyOrTokenSize, assemblyName, assemblyNameSize, out assemblyNameSize, out assemblyMetadata, out hashValueBlob, out hashValueSize, out assemblyRefFlags));
                                    }

                                    String publicKeyString = String.Empty;
                                    for (int pos = 0; pos < publicKeyOrTokenSize; pos++)
                                    {
                                        publicKeyString += String.Format("{0}", Marshal.ReadByte(publicKeyOrToken, pos).ToString("x2"));
                                    }

                                    yield return String.Format("{0}, {1}, Version={2}.{3}.{4}.{5}, Culture={6}, PublicKeyToken={7}", typeRefName, Marshal.PtrToStringUni(assemblyName), assemblyMetadata.majorVersion, assemblyMetadata.minorVersion, assemblyMetadata.buildNumber, assemblyMetadata.revisionNumber, String.IsNullOrEmpty(Marshal.PtrToStringUni(assemblyMetadata.locale)) ? "neutral" : Marshal.PtrToStringUni(assemblyMetadata.locale), String.IsNullOrEmpty(publicKeyString) ? "null" : publicKeyString);
                                }
                                finally
                                {
                                    if (assemblyName != IntPtr.Zero && assemblyNameSize > 0)
                                    {
                                        Marshal.FreeCoTaskMem(assemblyName);
                                        assemblyName = IntPtr.Zero;
                                    }

                                    if (assemblyMetadata.locale != IntPtr.Zero && assemblyMetadata.localeSize > 0)
                                    {
                                        Marshal.FreeCoTaskMem(assemblyMetadata.locale);
                                        assemblyMetadata.locale = IntPtr.Zero;
                                    }
                                }
                            }
                        }
                    }
                }
                while (typeRefCount > 0);
            }
            finally
            {
                metaDataImport.CloseEnum(enumHandle);
            }
            yield break;
        }
 internal static IEnumerable GetTypeRefNames(string assemblyLocation)
 {
     IMetaDataDispenser iteratorVariable0 = new MetaDataDispenser() as IMetaDataDispenser;
     if (iteratorVariable0 == null)
     {
         throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataDispenser"));
     }
     Guid riid = new Guid("7DAC8207-D3AE-4c75-9B67-92801A497D44");
     object unknown = null;
     System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable0.OpenScope(assemblyLocation, 0, ref riid, out unknown));
     IMetaDataImport iteratorVariable3 = unknown as IMetaDataImport;
     if (iteratorVariable3 == null)
     {
         throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataImport"));
     }
     IntPtr enumHandle = new IntPtr();
     uint[] rTypeRefs = new uint[20];
     uint typeRefs = 0;
     do
     {
         System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.EnumTypeRefs(ref enumHandle, rTypeRefs, (uint) rTypeRefs.Length, ref typeRefs));
         for (int j = 0; j < typeRefs; j++)
         {
             uint iteratorVariable10;
             uint iteratorVariable9;
             IntPtr zero = IntPtr.Zero;
             System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.GetTypeRefProps(rTypeRefs[j], out iteratorVariable10, zero, 0, out iteratorVariable9));
             if (iteratorVariable9 > 0)
             {
                 string iteratorVariable11 = string.Empty;
                 zero = Marshal.AllocCoTaskMem((int) (2 * (iteratorVariable9 + 1)));
                 try
                 {
                     System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.GetTypeRefProps(rTypeRefs[j], out iteratorVariable10, zero, iteratorVariable9, out iteratorVariable9));
                 }
                 finally
                 {
                     iteratorVariable11 = Marshal.PtrToStringUni(zero);
                     Marshal.FreeCoTaskMem(zero);
                 }
                 IMetaDataAssemblyImport iteratorVariable12 = unknown as IMetaDataAssemblyImport;
                 if (iteratorVariable12 == null)
                 {
                     throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataAssemblyImport"));
                 }
                 if (TokenTypeFromToken(iteratorVariable10) == MetadataTokenType.AssemblyRef)
                 {
                     uint iteratorVariable20;
                     uint iteratorVariable19;
                     uint iteratorVariable17;
                     uint iteratorVariable15;
                     AssemblyMetadata iteratorVariable13;
                     IntPtr publicKeyOrToken = IntPtr.Zero;
                     IntPtr assemblyName = IntPtr.Zero;
                     IntPtr hashValueBlob = IntPtr.Zero;
                     System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable12.GetAssemblyRefProps(iteratorVariable10, out publicKeyOrToken, out iteratorVariable15, assemblyName, 0, out iteratorVariable17, out iteratorVariable13, out hashValueBlob, out iteratorVariable19, out iteratorVariable20));
                     if (iteratorVariable17 > 0)
                     {
                         assemblyName = Marshal.AllocCoTaskMem((int) (2 * (iteratorVariable17 + 1)));
                     }
                     if (iteratorVariable13.localeSize > 0)
                     {
                         iteratorVariable13.locale = Marshal.AllocCoTaskMem((int) (2 * (iteratorVariable13.localeSize + 1)));
                     }
                     if ((iteratorVariable17 > 0) || (iteratorVariable13.localeSize > 0))
                     {
                         System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable12.GetAssemblyRefProps(iteratorVariable10, out publicKeyOrToken, out iteratorVariable15, assemblyName, iteratorVariable17, out iteratorVariable17, out iteratorVariable13, out hashValueBlob, out iteratorVariable19, out iteratorVariable20));
                     }
                     string iteratorVariable21 = string.Empty;
                     for (int k = 0; k < iteratorVariable15; k++)
                     {
                         iteratorVariable21 = iteratorVariable21 + string.Format("{0}", Marshal.ReadByte(publicKeyOrToken, k).ToString("x2"));
                     }
                     yield return string.Format("{0}, {1}, Version={2}.{3}.{4}.{5}, Culture={6}, PublicKeyToken={7}", new object[] { iteratorVariable11, Marshal.PtrToStringUni(assemblyName), iteratorVariable13.majorVersion, iteratorVariable13.minorVersion, iteratorVariable13.buildNumber, iteratorVariable13.revisionNumber, string.IsNullOrEmpty(Marshal.PtrToStringUni(iteratorVariable13.locale)) ? "neutral" : Marshal.PtrToStringUni(iteratorVariable13.locale), string.IsNullOrEmpty(iteratorVariable21) ? "null" : iteratorVariable21 });
                 }
             }
         }
     }
     while (typeRefs > 0);
 }
Ejemplo n.º 5
0
        internal static IEnumerable GetTypeRefNames(string assemblyLocation)
        {
            IMetaDataDispenser iteratorVariable0 = new MetaDataDispenser() as IMetaDataDispenser;

            if (iteratorVariable0 == null)
            {
                throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataDispenser"));
            }
            Guid   riid    = new Guid("7DAC8207-D3AE-4c75-9B67-92801A497D44");
            object unknown = null;

            System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable0.OpenScope(assemblyLocation, 0, ref riid, out unknown));
            IMetaDataImport iteratorVariable3 = unknown as IMetaDataImport;

            if (iteratorVariable3 == null)
            {
                throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataImport"));
            }
            IntPtr enumHandle = new IntPtr();

            uint[] rTypeRefs = new uint[20];
            uint   typeRefs  = 0;

            do
            {
                System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.EnumTypeRefs(ref enumHandle, rTypeRefs, (uint)rTypeRefs.Length, ref typeRefs));
                for (int j = 0; j < typeRefs; j++)
                {
                    uint   iteratorVariable10;
                    uint   iteratorVariable9;
                    IntPtr zero = IntPtr.Zero;
                    System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.GetTypeRefProps(rTypeRefs[j], out iteratorVariable10, zero, 0, out iteratorVariable9));
                    if (iteratorVariable9 > 0)
                    {
                        string iteratorVariable11 = string.Empty;
                        zero = Marshal.AllocCoTaskMem((int)(2 * (iteratorVariable9 + 1)));
                        try
                        {
                            System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable3.GetTypeRefProps(rTypeRefs[j], out iteratorVariable10, zero, iteratorVariable9, out iteratorVariable9));
                        }
                        finally
                        {
                            iteratorVariable11 = Marshal.PtrToStringUni(zero);
                            Marshal.FreeCoTaskMem(zero);
                        }
                        IMetaDataAssemblyImport iteratorVariable12 = unknown as IMetaDataAssemblyImport;
                        if (iteratorVariable12 == null)
                        {
                            throw new InvalidOperationException(string.Format(SR.GetString("Error_MetaDataInterfaceMissing"), assemblyLocation, "IMetaDataAssemblyImport"));
                        }
                        if (TokenTypeFromToken(iteratorVariable10) == MetadataTokenType.AssemblyRef)
                        {
                            uint             iteratorVariable20;
                            uint             iteratorVariable19;
                            uint             iteratorVariable17;
                            uint             iteratorVariable15;
                            AssemblyMetadata iteratorVariable13;
                            IntPtr           publicKeyOrToken = IntPtr.Zero;
                            IntPtr           assemblyName     = IntPtr.Zero;
                            IntPtr           hashValueBlob    = IntPtr.Zero;
                            System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable12.GetAssemblyRefProps(iteratorVariable10, out publicKeyOrToken, out iteratorVariable15, assemblyName, 0, out iteratorVariable17, out iteratorVariable13, out hashValueBlob, out iteratorVariable19, out iteratorVariable20));
                            if (iteratorVariable17 > 0)
                            {
                                assemblyName = Marshal.AllocCoTaskMem((int)(2 * (iteratorVariable17 + 1)));
                            }
                            if (iteratorVariable13.localeSize > 0)
                            {
                                iteratorVariable13.locale = Marshal.AllocCoTaskMem((int)(2 * (iteratorVariable13.localeSize + 1)));
                            }
                            if ((iteratorVariable17 > 0) || (iteratorVariable13.localeSize > 0))
                            {
                                System.Workflow.Interop.NativeMethods.ThrowOnFailure(iteratorVariable12.GetAssemblyRefProps(iteratorVariable10, out publicKeyOrToken, out iteratorVariable15, assemblyName, iteratorVariable17, out iteratorVariable17, out iteratorVariable13, out hashValueBlob, out iteratorVariable19, out iteratorVariable20));
                            }
                            string iteratorVariable21 = string.Empty;
                            for (int k = 0; k < iteratorVariable15; k++)
                            {
                                iteratorVariable21 = iteratorVariable21 + string.Format("{0}", Marshal.ReadByte(publicKeyOrToken, k).ToString("x2"));
                            }
                            yield return(string.Format("{0}, {1}, Version={2}.{3}.{4}.{5}, Culture={6}, PublicKeyToken={7}", new object[] { iteratorVariable11, Marshal.PtrToStringUni(assemblyName), iteratorVariable13.majorVersion, iteratorVariable13.minorVersion, iteratorVariable13.buildNumber, iteratorVariable13.revisionNumber, string.IsNullOrEmpty(Marshal.PtrToStringUni(iteratorVariable13.locale)) ? "neutral" : Marshal.PtrToStringUni(iteratorVariable13.locale), string.IsNullOrEmpty(iteratorVariable21) ? "null" : iteratorVariable21 }));
                        }
                    }
                }
            }while (typeRefs > 0);
        }