예제 #1
0
        /// <summary>
        /// Makes the assembly debuggable by attaching the DebuggableAttribute
        /// to the Assembly. Call immediately before calling WritePEFile.
        /// </summary>
        /// <param name="allowDebug">set true to enable debugging, false otherwise</param>
        /// <param name="suppressOpt">set true to disable optimizations that affect debugging</param>
        public void MakeDebuggable(bool allowDebug, bool suppressOpt)
        {
            Type[]   twoBools = new Type[] { PrimitiveType.Boolean, PrimitiveType.Boolean };
            ClassRef debugRef = MSCorLib.mscorlib.GetClass("System.Diagnostics", "DebuggableAttribute");

            if (debugRef == null)
            {
                debugRef = MSCorLib.mscorlib.AddClass("System.Diagnostics", "DebuggableAttribute");
            }
            MethodRef dCtor = debugRef.GetMethod(".ctor", twoBools);

            if (dCtor == null)
            {
                dCtor = debugRef.AddMethod(".ctor", PrimitiveType.Void, twoBools);
                dCtor.AddCallConv(CallConv.Instance);
            }
            Constant[] dbgArgs = new Constant[] { new BoolConst(allowDebug), new BoolConst(suppressOpt) };
            thisAssembly.AddCustomAttribute(dCtor, dbgArgs);
        }
예제 #2
0
        /// <summary>
        /// Get the MethodRef equivalent to this MethodDef.  If one
        /// does not exist, then create it.
        /// </summary>
        /// <returns>MethodRef for this MethodDef</returns>
        public MethodRef MakeRefOf()
        {
            if (refOf != null)
            {
                return(refOf);
            }
            ClassRef parRef = ((ClassDef)parent).MakeRefOf();

            refOf = parRef.GetMethod(name, sig.parTypes);
            if (refOf == null)
            {
                Type   rType  = sig.MakeRefRetType();
                Type[] pTypes = sig.MakeRefParTypes();
                refOf       = new MethodRef(parRef, name, rType, pTypes);
                refOf.defOf = this;
                refOf.AddCallConv(this.GetCallConv());
            }
            return(refOf);
        }
예제 #3
0
 /// <summary>
 /// Get the MethodRef equivalent to this MethodDef.  If one
 /// does not exist, then create it.
 /// </summary>
 /// <returns>MethodRef for this MethodDef</returns>
 public MethodRef MakeRefOf()
 {
     if (refOf != null) return refOf;
     ClassRef parRef = ((ClassDef)parent).MakeRefOf();
     refOf = parRef.GetMethod(name, sig.parTypes);
     if (refOf == null)
     {
         Type rType = sig.MakeRefRetType();
         Type[] pTypes = sig.MakeRefParTypes();
         refOf = new MethodRef(parRef, name, rType, pTypes);
         refOf.defOf = this;
         refOf.AddCallConv(this.GetCallConv());
     }
     return refOf;
 }