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

ScheduledTaskExecutorName には名前空間を含める必要があります。

2 番目のパラメーターに名前空間全体を含めてみてください。

私の例:

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 に答える