I’m trying to learn reflection in C# and need some help with my code. I’ve had trouble finding good code examples/guides, so I apologize if my code is poorly done.
Essentially I’m just trying to check out a given assembly dll for a particular method name (path and method name have been redacted).
The problem occurs on the line object lateBoundObj = asm.CreateInstance(typeName); and it reads An object reference is required for the non-static field, method, or property...
I understand this has to do with static vs non-static and creating a new Assembly or something along those lines, but need some help understanding the issue and how to fix it.
Thank you!
public const string assemblyPath = @"<my file path>";
Assembly asm;
static void Main(string[] args)
{
//asm = new Assembly();
Console.Read();
MethodInfo mi;
object result = null;
object[] arguments = new object[] { "ABC123" };
try
{
Assembly assemblyInstance = Assembly.LoadFrom(assemblyPath);
Type[] types = assemblyInstance.GetTypes();
foreach (Type t in types)
{
mi = t.GetMethod("<my method name>");
if (mi != null)
{
string typeName = t.FullName;
object lateBoundObj = asm.CreateInstance(typeName);
result = t.InvokeMember("GetWeb", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, null, lateBoundObj, arguments);
break;
}
}
//set return for find method
}
catch (Exception ex) { }
}
The problem is that you’re never assigning a value to
asm, so it’s got the default value ofnull. Perhaps you meant to useassemblyInstanceinstead?In fact, I wouldn’t use
Assembly.CreateInstanceorType.FullNameat all there – I’d use:Also note, you should always avoid code like this:
Always at least log the exception. Ideally, don’t catch an exception you can’t really “handle” at all.