2010-07-06 50 views
2

我正在制作一个Windows应用程序,用户从组合框中选择一种类型。基于选择,使用反射我想创建相应类型的实例并调用其方法之一。 我想创建的类型也被定义在与sperate类相同的Windows应用程序中。但是我收到了Title中提到的错误。继承人我的代码。无法从程序集xxx中加载类型xxx

Form 1代码:

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
     cbLogs.SelectedIndex = 0; 
    } 

    private void btnProcess_Click(object sender, EventArgs e) 
    { 
     lblMessage.Text = ""; 
     lblResult.Text = ""; 
     if (cbLogs.SelectedIndex <= 0) 
     { 
      lblMessage.Text = "Please select Log to be processed"; 
      cbLogs.Focus(); 
      return; 
     } 
     Assembly currAss = System.Reflection.Assembly.GetExecutingAssembly(); 
     //I get above error on below line. 
     object obj = Activator.CreateInstance(currAss.FullName,"SustainabilityXpress "); 
     Type type = obj.GetType(); 
     object result = type.InvokeMember("process", 
      BindingFlags.Default | BindingFlags.InvokeMethod, 
      null, obj, null); 

     lblResult.Text = result.ToString(); 

    } 

} 

ILogBase接口:

interface ILogBase 
{   
    string process(); 

} 

SustainabilityXpress中类,它实现ILogBase:

public class SustainabilityXpress: ILogBase 
{ 
    string LogName = "SUSTAINABILITYXPRESS"; 
    public string process() 
    { 
     return "Sustainabilityxpress"; 
    } 
} 

回答

5

一定要正确命名SustainabilityXpress类 - 是不是你在伪装它的名字空间? (例如,“Name.Space.SustainabilityXpress”)。

此外,检查Activator.CreateInstance以确保满足所有要求。

而且,正如@Grzenio指出的那样,名称SustainabilityXpress可能存在拼写错误。

+0

thanx Humberto,添加命名空间解决了我的问题。 – sunitw 2010-07-07 11:30:08

0

我只注意到有在 “SustainabilityXpress中” 的空间。尝试删除它,也许这是问题。

1

我不确定这是否只发布在帖子中,但是"SustainabilityXpress "中一定不能有空格。您还必须使用完整的类名(包括名称空间)。

如果这没有帮助,也许该类型不在组件中? GetExecutingAssembly让你获得当前代码所在的程序集...

+0

谢谢 - 我的名字后面也有一个空格 – Andy 2016-05-31 12:57:46

相关问题