Activator.CreateInstance (строка, строка), выбрасывающая исключение TypeLoadException - PullRequest
1 голос
/ 21 ноября 2011

У меня есть следующий код:

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.Я неправильно указал название сборки или типа или что-то еще происходит?

Ответы [ 3 ]

2 голосов
/ 21 ноября 2011

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
    {

    }
}
0 голосов
/ 21 ноября 2011

CreateInstance предполагает, что сборка уже загружена.Я предполагаю, что на самом деле это не так.Вместо этого вам нужно использовать CreateInstanceFrom .

РЕДАКТИРОВАТЬ: Хорошо, если вы знаете, что сборка загружена, то это, скорее всего, проблема с вашими параметрами для CreateInstance.Используйте полное имя типа вместо простого имени класса, как сейчас.

0 голосов
/ 21 ноября 2011

вы пробовали журнал привязки сборки?

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

...