예제 #1
0
        internal PDBHelper(CILAssemblyManipulator.API.EmittingArguments eArgs, String outPath)
        {
            Object writer;

            CoCreateInstance(ref UNMANAGED_WRITER_GUID, null, 1u, ref SYM_WRITER_GUID, out writer);
            this._unmanagedWriter = (ISymUnmanagedWriter2)writer;
            this._unmanagedDocs   = new Dictionary <String, ISymUnmanagedDocumentWriter>();

            this._tmpFN = System.IO.Path.Combine(System.IO.Path.GetTempPath(), System.IO.Path.GetRandomFileName()) + ".pdb";
            this._fn    = System.IO.Path.ChangeExtension(outPath, "pdb");
            this._eArgs = eArgs;
            // Initialize writer
            this._unmanagedWriter.Initialize2(new MDHelper(eArgs), this._tmpFN, null, true, this._fn);

            // Get debug header data
            Int32 dbgHdrSize;
            ImageDebugDirectory debugDir;

            // Get size of debug directory
            this._unmanagedWriter.GetDebugInfo(out debugDir, 0, out dbgHdrSize, null);
            // Get the data of debug directory
            var debugDirContents = new byte[dbgHdrSize];

            this._unmanagedWriter.GetDebugInfo(out debugDir, dbgHdrSize, out dbgHdrSize, debugDirContents);
            // Set information for CILAssemblyManipulator emitter
            var dbgInfo = new CILAssemblyManipulator.API.EmittingDebugInformation();

            dbgInfo.Characteristics = debugDir.Characteristics;
            dbgInfo.Timestamp       = debugDir.TimeDateStamp;
            dbgInfo.VersionMajor    = debugDir.MajorVersion;
            dbgInfo.VersionMinor    = debugDir.MinorVersion;
            dbgInfo.DebugType       = debugDir.Type;
            dbgInfo.DebugData       = debugDirContents;
            eArgs.DebugInformation  = dbgInfo;
        }
예제 #2
0
        internal MDHelper(CILAssemblyManipulator.API.EmittingArguments eArgs)
        {
            ArgumentValidator.ValidateNotNull("Emitting arguments", eArgs);

            this._eArgs = eArgs;
        }