internal static void VerifyIL(
            this ImmutableArray <byte> assembly,
            string qualifiedName,
            string expectedIL,
            [CallerLineNumber] int expectedValueSourceLine  = 0,
            [CallerFilePath] string expectedValueSourcePath = null)
        {
            var parts = qualifiedName.Split('.');

            if (parts.Length != 2)
            {
                throw new NotImplementedException();
            }

            using (var module = new PEModule(new PEReader(assembly), metadataOpt: IntPtr.Zero, metadataSizeOpt: 0))
            {
                var reader       = module.MetadataReader;
                var typeDef      = reader.GetTypeDef(parts[0]);
                var methodName   = parts[1];
                var methodHandle = reader.GetMethodDefHandle(typeDef, methodName);
                var methodBody   = module.GetMethodBodyOrThrow(methodHandle);

                var pooled     = PooledStringBuilder.GetInstance();
                var builder    = pooled.Builder;
                var writer     = new StringWriter(pooled.Builder);
                var visualizer = new MetadataVisualizer(reader, writer);
                visualizer.VisualizeMethodBody(methodBody, methodHandle, emitHeader: false);
                var actualIL = pooled.ToStringAndFree();

                AssertEx.AssertEqualToleratingWhitespaceDifferences(expectedIL, actualIL, escapeQuotes: true, expectedValueSourcePath: expectedValueSourcePath, expectedValueSourceLine: expectedValueSourceLine);
            }
        }
Beispiel #2
0
        internal int GetLocalSignatureToken(MethodDefinitionHandle methodHandle)
        {
            if (!_includeLocalSignatures)
            {
                return(0);
            }

            using (var module = new PEModule(new PEReader(ImmutableArray.CreateRange(this.FullImage)), metadataOpt: IntPtr.Zero, metadataSizeOpt: 0))
            {
                var reader               = module.MetadataReader;
                var methodIL             = module.GetMethodBodyOrThrow(methodHandle);
                var localSignatureHandle = methodIL.LocalSignature;
                return(reader.GetToken(localSignatureHandle));
            }
        }
        internal int GetLocalSignatureToken(MethodDefinitionHandle methodHandle)
        {
            if (!_includeLocalSignatures)
            {
                return 0;
            }

            using (var module = new PEModule(new PEReader(ImmutableArray.CreateRange(this.FullImage)), metadataOpt: IntPtr.Zero, metadataSizeOpt: 0))
            {
                var reader = module.MetadataReader;
                var methodIL = module.GetMethodBodyOrThrow(methodHandle);
                var localSignatureHandle = methodIL.LocalSignature;
                return reader.GetToken(localSignatureHandle);
            }
        }