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)不做你认为它做的事。

第一个参数是程序集名称。第二个参数是完全限定的类型名称。

所以你应该有:

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 回答