1

我有以下代码:

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!";
    }
}

它驻留在程序集名称(在程序集的属性中定义)为 的程序集中Tests.WebApplication.Application.Unit

我的电话Invoke(string, string)看起来像这样:

ScheduledTaskInvoker.Invoke("Tests.WebApplication.Application.Unit", "DummyScheduledTaskExecutor");

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

4

3 回答 3

2

scheduleTaskExecutorName 需要包含命名空间。

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

我的例子:

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
    {

    }
}
于 2011-11-21T17:00:44.567 回答
0

您是否尝试过程序集绑定日志?

http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

于 2011-11-21T16:46:24.810 回答
0

CreateInstance将假定程序集已加载。我的猜测是它实际上不是。您需要改用CreateInstanceFrom

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

于 2011-11-21T16:47:28.163 回答