C# Activator.CreateInstance(字符串,字符串)引发TypeLoadException

C# Activator.CreateInstance(字符串,字符串)引发TypeLoadException,c#,reflection,activator,typeloadexception,C#,Reflection,Activator,Typeloadexception,我有以下代码: public static void Invoke(string assemblyName, string scheduledTaskExecutorName) { ObjectHandle objectHandle = Activator.CreateInstance(assemblyName, scheduledTaskExecutorName); IScheduledTaskExecutor scheduledTaskExecutor = (ISchedul

我有以下代码:

public static void Invoke(string assemblyName, string scheduledTaskExecutorName)
{
    ObjectHandle objectHandle = Activator.CreateInstance(assemblyName, scheduledTaskExecutorName);
    IScheduledTaskExecutor scheduledTaskExecutor = (IScheduledTaskExecutor)objectHandle.Unwrap();
    scheduledTaskExecutor.ExecuteScheduledTask();
}
我有一个名为
DummyScheduledTaskExecutor
的类,它如下所示:

public class DummyScheduledTaskExecutor : IScheduledTaskExecutor
{
    public void ExecuteScheduledTask()
    {
        DummyTextFile.Text = "Success!";
    }
}
ScheduledTaskInvoker.Invoke("Tests.WebApplication.Application.Unit", "DummyScheduledTaskExecutor");
它驻留在程序集中,其程序集名称(如程序集属性中定义的)为
Tests.WebApplication.Application.Unit

我对
Invoke(string,string)
的调用如下所示:

public class DummyScheduledTaskExecutor : IScheduledTaskExecutor
{
    public void ExecuteScheduledTask()
    {
        DummyTextFile.Text = "Success!";
    }
}
ScheduledTaskInvoker.Invoke("Tests.WebApplication.Application.Unit", "DummyScheduledTaskExecutor");

尝试运行此代码只会引发TypeLoadException。我是否错误地表达了程序集或类型名称,或者发生了其他问题?

是否尝试了程序集绑定日志


CreateInstance将假定程序集已加载。我猜事实并非如此。您需要改用CreateInstanceFrom


编辑:如果您知道程序集已加载,则CreateInstance的参数很可能有问题。使用完全限定的类型名,而不是像现在这样使用简单的类名。

ScheduledTaskKexecutorName需要包含名称空间

尝试在第二个参数中包含整个名称空间

我的例子是:

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            object obj = Activator.CreateInstance(null, "WindowsFormsApplication6.TestClass");
        }
    }
}

namespace WindowsFormsApplication6
{
    public class TestClass
    {

    }
}

我刚刚尝试过,但没有列出任何程序集绑定失败。该代码在MSTest单元测试中失败。我不知道这是否相关。这是当前的程序集。我想这意味着它已经上膛了?谢谢。文档中没有说明我需要使用名称空间。我现在有个例外,所以你让我走了!如果您使用单例类进行文件输出,请确保使用lock(){},因为我以前在创建日志类时遇到过这些问题。我会投你一票,因为我不能忍受人们接受答案,但不要投反对票。大卫,这是怎么回事?