Assembly References - User Compiled

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Greetings,
I am compiling a class with the CSharpCodeProvider, then compiling
a class which uses it, having troubles with the Method.Invoke.

CLASSS1:
using System;
namespace MySpace {
public class MyClass {
public long MyProperty {
get { return 999; } set {}
}
}
}

After compile, reflection shows:
Module[0] MyClass.dll
Type[0] MySpace.MyClass
Method[0] Int64 get_MyProperty()
Method[1] Void set_MyProperty(Int64
Method[2] System.Type GetType()
Method[3] System.ToString()
Method[4] Boolean Equals(System.Object)
Method[5] Int32 GetHashCode()

CLASS2:
using System;
using MySpace;
namespace MySpace {
public class ProcessingClass {
public static void Process_MyClass(MyClass mc) {
Console.WriteLine("Value: " + mc.MyProperty.ToString());
}
}
}

After compile, reflection shows:
Module[0] ProcessingClass.dll
Type[0] MySpace.ProcessingClass
Method[0] Void Process_MyClass(MyClass)
Method[1] System.Type GetType()
Method[2] System.ToString()
Method[3] Boolean Equals(System.Object)
Method[4] Int32 GetHashCode()

then invoking:
Type[] types;

//Get MyClass Instance
types = class1Assemble.GetExportedTypes();
object myclass = Activator.CreateInstance(types[0]);

//Invoke Process_MyClass Method on passing myclass
types = class2Assembly.GetExportedTypes();
MethodInfo mi = types[0].GetMethod("Process_MyClass");
mi.Invoke(null, new object[] { myclass });

This operation fails with the following message:

"Object of type 'MySpace.MyClass' cannot be converted to type
'MySpace.MyClass'."

Rather Odd. I can change the MyClass definition to MyClass(long val),
change the Process_MyClass to;
Console.WriteLine("Value: " + val.ToString());
and the following works fine;
mi.Invoke(null, new object[] { 999 });
--

.



Relevant Pages