string assemblyName="xx";
string className="cc";
Assembly assembly = Assembly.LoadFile(assemblyName);
Object obj = assembly.CreateInstance(className);
cc c = (cc)obj;// 这里为什么会抛出InvalidCastException得到得obj确实是className类型得,就是cast不了。求高手帮忙,急!
string className="cc";
Assembly assembly = Assembly.LoadFile(assemblyName);
Object obj = assembly.CreateInstance(className);
cc c = (cc)obj;// 这里为什么会抛出InvalidCastException得到得obj确实是className类型得,就是cast不了。求高手帮忙,急!
Dim ApplicationName As String = [Assembly].GetExecutingAssembly.GetName.Name
O = [Assembly].GetExecutingAssembly.CreateInstance(ApplicationName & ".Form1") '一定要加上工程名前缀
O.Show()
if(obj is cc)
cc c = obj as cc
你既然在程序里面可以直接用
cc c = (cc)obj;那么就证明程序知道cc这个类,已经把这个包含cc的文件添加到引用中了
那你干吗要用反射呢?如果你没有添加的话,既然用了反射,又何必再把这个类转换呢?string DllPath=System.IO.Directory.GetCurrentDirectory();Assembly assembly = Assembly.LoadFile(DllPath+"\\your.dll");string AssName=assembly.GetName().Name;
Type SearchType=null;
Type[] myTypes=assembly.GetTypes();
foreach(Type OneType in myTypes)
{
string TypeName=OneType.Name;
if(TypeName.ToLower()=="yourClassName")
SearchType=OneType;
}
object test=Activator.CreateInstance(SearchType);
cc c = (cc)obj;改成:
cc c=(Type.GetType(className))Activator.CreateInstance(Type.GetType(className)));