无法从程序集xxx加载类型xxx

时间:2010-07-06 10:46:17

标签: c# .net reflection

我正在创建一个Windows应用程序,用户从组合框中选择一个类型。根据选择,使用反射我想创建相应类型的实例并调用其方法之一。 我想要创建的类型也在与sperate类相同的Windows应用程序中定义。但是我收到标题中提到的错误。这是我的代码。

Form1代码:

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();

}

实现ILogBase的SustainabilityXpress类:

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

3 个答案:

答案 0 :(得分:5)

确保正确命名SustainabilityXpress类 - 您是不是要伪装其名称空间? (例如,“Name.Space.SustainabilityXpress”)。

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

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

答案 1 :(得分:1)

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

如果这没有帮助,那么类型可能不在程序集中? GetExecutingAssembly为您提供当前代码所在的程序集...

答案 2 :(得分:0)

我刚注意到“SustainabilityXpress”中有一个空格。尝试删除它,也许这就是问题。