本文整理汇总了C#中Mono.Cecil.MemberReference类的典型用法代码示例。如果您正苦于以下问题:C# MemberReference类的具体用法?C# MemberReference怎么用?C# MemberReference使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
MemberReference类属于Mono.Cecil命名空间,在下文中一共展示了MemberReference类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetMemberReference
public MemberReference GetMemberReference(IAssemblyResolver resolver)
{
if (resolver == null)
throw new ArgumentNullException("resolver");
if (memberReference != null)
return memberReference;
// reload from filename
ReaderParameters readerParameters = new ReaderParameters();
// Use new assembly resolver instance so that the AssemblyDefinitions can be garbage-collected
// once the code is decompiled.
readerParameters.AssemblyResolver = resolver;
string typeName;
if (GetAssemblyAndType(FileName.ToString(), out assemblyFile, out typeName)) {
ModuleDefinition module = ModuleDefinition.ReadModule(assemblyFile, readerParameters);
TypeDefinition typeDefinition = module.GetType(typeName);
if (typeDefinition == null)
throw new InvalidOperationException("Could not find type");
memberReference = typeDefinition;
}
return memberReference;
}
示例2: CreateUsage
private MethodUsage CreateUsage(MemberReference operand, ModuleDefinition assembly, TypeDefinition type, MethodDefinition method, string testAssemblyPath)
{
if (operand == null)
return null;
Test test = new Test
{
PathToAssembly = Path.GetDirectoryName(testAssemblyPath),
AssemblyName = assembly.Assembly.Name.Name,
NamespaceName = type.Namespace,
ClassName = type.Name,
MethodName = method.Name
};
var instructionCall = new MethodUsage
{
AssemblyName = operand.DeclaringType.Scope.Name + ".dll",
NamespaceName = operand.DeclaringType.Namespace,
ClassName = operand.DeclaringType.Name,
MethodName = operand.Name,
TestCoverage = new List<Test> {test}
};
return instructionCall;
}
示例3: AssertInstruction
internal static void AssertInstruction(Instruction actual, OpCode opCode, MemberReference expectedCtor)
{
Assert.AreEqual(opCode, actual.OpCode);
MethodReference actualCtor = (MethodReference)actual.Operand;
Assert.AreEqual(expectedCtor.DeclaringType.Name, actualCtor.DeclaringType.Name, opCode.ToString());
Assert.AreEqual(expectedCtor, actualCtor.Resolve(), opCode.ToString());
}
示例4: IsStringConcat
static bool IsStringConcat (MemberReference member)
{
if (member == null || (member.Name != "Concat"))
return false;
return (member.DeclaringType.FullName == "System.String");
}
示例5: GetGenericContextOf
public Dictionary<string, GenericEntry> GetGenericContextOf(MemberReference memberReference)
{
var ret = new Dictionary<string, GenericEntry>();
GetMethodGenericArgumentsOn(memberReference, ret);
GetClassGenericArgumentsOn(memberReference, ret);
return ret;
}
示例6: SetIndirectConstraintsOn
public void SetIndirectConstraintsOn(MemberReference reference, MemberReference parent, bool inInheritance)
{
if (reference == null) return;
if (parent == null) return;
//TODO handle inInheritance call
var def = reference.DeclaringType.ThreadSafeResolve();
if (def != null && def.IsInterface)
{
//coming back to an interface
var mdp = ((MethodReference)parent).ThreadSafeResolve();
var mdr = ((MethodReference)reference).ThreadSafeResolve();
if (mdp == null || mdr == null) return;
if (mdp.Parameters.Count != mdr.Parameters.Count) Console.WriteLine("not sure what to do?!");
for (var i = 0; i < mdp.Parameters.Count; i++)
{
var current = mdr.Parameters[i].GetTypeWithGenericResolve();
if (current == null) continue; ;
if (current.IsGenericParameter)
{
var par = mdp.Parameters[i].GetTypeWithGenericResolve();
if (par == null) continue;
if(!_limitations.ContainsKey(current.Name))
{
_limitations.Add(current.Name,
par.IsGenericParameter
? new GenericEntry(null, true, par.Name)
: new GenericEntry(par.ThreadSafeResolve(), false, null));
}
}
}
}
}
示例7: BreakpointBookmark
public BreakpointBookmark(MemberReference member, AstLocation location, ILRange range, BreakpointAction action, DecompiledLanguages language) : base(member, location)
{
this.action = action;
this.ILRange = range;
this.Tooltip = string.Format("Language:{0}, Line:{1}, IL range:{2}-{3}", language.ToString(), location.Line, range.From, range.To);
this.Language = language;
}
示例8: Analyze
public static void Analyze(MemberReference member)
{
if (member is TypeReference) {
TypeDefinition type = ((TypeReference)member).Resolve();
if (type != null)
AnalyzerTreeView.Instance.ShowOrFocus(new AnalyzedTypeTreeNode(type));
}
else if (member is FieldReference) {
FieldDefinition field = ((FieldReference)member).Resolve();
if (field != null)
AnalyzerTreeView.Instance.ShowOrFocus(new AnalyzedFieldTreeNode(field));
}
else if (member is MethodReference) {
MethodDefinition method = ((MethodReference)member).Resolve();
if (method != null)
AnalyzerTreeView.Instance.ShowOrFocus(new AnalyzedMethodTreeNode(method));
}
else if (member is PropertyReference) {
PropertyDefinition property = ((PropertyReference)member).Resolve();
if (property != null)
AnalyzerTreeView.Instance.ShowOrFocus(new AnalyzedPropertyTreeNode(property));
}
else if (member is EventReference) {
EventDefinition @event = ((EventReference)member).Resolve();
if (@event != null)
AnalyzerTreeView.Instance.ShowOrFocus(new AnalyzedEventTreeNode(@event));
}
}
示例9: EnsureWellName
public static void EnsureWellName(MemberReference r)
{
if (r.mWellName != null) return;
if (IGNORE_WELLNAMING)
{
r.mWellName = r.Name;
return;
}
TypeReference tr = r as TypeReference;
if (tr != null) { CreateWellName(tr); return; }
FieldReference fr = r as FieldReference;
if (fr != null) { CreateWellName(fr); return; }
PropertyReference pr = r as PropertyReference;
if (pr != null) { CreateWellName(pr); return; }
MethodReference mr = r as MethodReference;
if (mr != null) { CreateWellName(mr); return; }
EventReference er = r as EventReference;
if (er != null) { CreateWellName(er); return; }
throw new Exception();
}
示例10: MemberIsHidden
public static bool MemberIsHidden(MemberReference member, DecompilerSettings settings)
{
MethodDefinition method = member as MethodDefinition;
if (method != null) {
if (method.IsGetter || method.IsSetter || method.IsAddOn || method.IsRemoveOn)
return true;
if (settings.AnonymousMethods && method.Name.StartsWith("<", StringComparison.Ordinal) && method.IsCompilerGenerated())
return true;
}
TypeDefinition type = member as TypeDefinition;
if (type != null && type.DeclaringType != null) {
if (settings.AnonymousMethods && type.Name.StartsWith("<>c__DisplayClass", StringComparison.Ordinal) && type.IsCompilerGenerated())
return true;
if (settings.YieldReturn && YieldReturnDecompiler.IsCompilerGeneratorEnumerator(type))
return true;
}
FieldDefinition field = member as FieldDefinition;
if (field != null && field.IsCompilerGenerated()) {
if (settings.AnonymousMethods && field.Name.StartsWith("CS$<>", StringComparison.Ordinal))
return true;
if (settings.AutomaticProperties && field.Name.StartsWith("<", StringComparison.Ordinal) && field.Name.EndsWith("BackingField", StringComparison.Ordinal))
return true;
}
// event-fields are not [CompilerGenerated]
if (field != null && settings.AutomaticEvents && field.DeclaringType.Events.Any(ev => ev.Name == field.Name))
return true;
return false;
}
示例11: GetMatchingElementMethod
private static MemberReference GetMatchingElementMethod(MemberReference memberReference)
{
var methodReference = memberReference as MethodReference;
var declaringType = (GenericInstanceType) memberReference.DeclaringType;
var elementType = declaringType.ElementType.ThreadSafeResolve();
if (elementType == null)
return null;
foreach (var current in elementType.Methods)
{
if(current.Name == memberReference.Name &&
current.Parameters.Count == methodReference.Parameters.Count)
{
//TODO need to check out params in cases where there are many matches
//for (int index = 0; index < methodReference.Parameters.Count; index++)
//{
// var method = methodReference.Parameters[index];
// var element = current.Parameters[index];
// var elementtype = element.GetTypeWithGenericResolve();
// var methodtype = method.GetTypeWithGenericResolve();
// if (elementtype == methodtype)
// {
// return current;
// }
//}
return current;
}
}
return null;
}
示例12: ArgumentNullException
public IEnumerable<ExceptionSources> this [MemberReference member] {
get {
if (member == null)
throw new ArgumentNullException ("member");
MemberReference memberDef = member.Resolve ();
if (memberDef == null) {
ArrayType array = member.DeclaringType as ArrayType;
if (array != null && array.Rank > 1) {
// Multi-dimensional array; the member is runtime generated,
// doesn't "really" exist (in a form that we can resolve),
// so we can't do anything further.
return new ExceptionSources[0];
}
throw new NotSupportedException (string.Format (
"Unable to resolve member {0}::{1}.",
member.DeclaringType.FullName, member.Name));
}
string memberDecl = xdoc.GetDeclaration (member.Resolve ());
Dictionary<string, ExceptionSources> e;
if (!db.TryGetValue (memberDecl, out e)) {
e = new Dictionary<string, ExceptionSources> ();
var bodies = GetMethodBodies (member);
foreach (var body in bodies) {
if (body == null)
continue;
FillExceptions (body, e);
}
db.Add (memberDecl, e);
}
return e.Values;
}
}
示例13: GetTestDescriptorFor
public TestDescriptor GetTestDescriptorFor(MemberReference refer)
{
var reference = refer as MethodReference;
if (reference == null) return null;
if (!IsTest(reference)) return null;
return new TestDescriptor(reference.Name, reference.Module.FullyQualifiedName, "simple.testing", reference.DeclaringType.FullName);
}
示例14: TryCreateAnalyzer
public static AnalyzerTreeNode TryCreateAnalyzer(MemberReference member)
{
if (CanShow(member))
return new AnalyzedEventTreeNode(member as EventDefinition);
else
return null;
}
示例15: Walk
/// <summary>
/// Mark all children of the given member
/// </summary>
internal static void Walk(ReachableContext context, MemberReference member)
{
// Mark declaring type
member.DeclaringType.MarkReachable(context);
TypeReference typeRef;
MethodReference methodRef;
EventReference eventRef;
FieldReference fieldRef;
PropertyReference propertyRef;
if ((typeRef = member as TypeReference) != null)
{
Walk(context, typeRef);
}
else if ((methodRef = member as MethodReference) != null)
{
Walk(context, methodRef);
}
else if ((eventRef = member as EventReference) != null)
{
Walk(context, eventRef);
}
else if ((fieldRef = member as FieldReference) != null)
{
Walk(context, fieldRef);
}
else if ((propertyRef = member as PropertyReference) != null)
{
Walk(context, propertyRef);
}
}