1

メインクラス....

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1{
    class Program{
        static void Main(string[] args){
            string className = "Demo";
            string namespaceName = "ConsoleApplication1";
            var myObj = Activator.CreateInstance(namespaceName, className);
            Console.Read();
        }
    }
}

他のクラス....

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1{
    class Demo{
        public void printClassName() {
            Console.WriteLine("Demo");
        }
    }
}

この単純なプログラムには実行時エラーがあります

var myObj = Activator.CreateInstance(namespaceName, className);ライン。

System.TypeLoadException {"Could not load type 'Demo' from assembly 'ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.":"Demo"}

このエラーを解決するのを手伝ってください!.

4

1 に答える 1

5

Activator.CreateInstance(string, string)あなたが思っていることをしません。

最初のパラメーターはアセンブリ名です。2 番目のパラメーターは、完全修飾型名です。

したがって、次のものが必要です。

string className = "ConsoleApplication1.Demo";
string assemblyName = "ConsoleApplication1";
var myObj = Activator.CreateInstance(assemblyName, className);

(もちろん、それが呼び出されたアセンブリにコンパイルされていると仮定しConsoleApplication1ます。)

Assemblyただし、別の方法でへのハンドルを取得できる場合は、 Assembly.GetType(string)and thenを使用できますActivator.CreateInstance(Type)

于 2013-11-14T14:10:17.453 に答える