如何使用Activator.CreateInstance从系统dll加载类型?

时间:2017-11-24 09:46:26

标签: c# activator

.Net 4.5.2和4.6.2,MSTest单元测试:

出于测试用例的目的,我需要通过在数据文件中将类名指定为字符串来创建“系统”对象。我只在运行时知道所需的类型作为字符串类型名称(可能是完全限定的)。

我尝试了相当正统的方法

            var assyName = "System"; //read from data file
            var typeName = "System.Boolean"; //read from data file
            var hndle = Activator.CreateInstance(assyName, typeName);
            var obj = hndle.Unwrap();
            var t = obj.GetType();

但是如果我从我自己的程序集中加载我自己的类型,这是有效的,如果我使用.Net程序集(如上所述)尝试它, Activator 行会抛出FileNotFound异常。我已经尝试将引用的系统程序集Copy Local属性更改为true,但这似乎没有任何效果。我也尝试过指定系统程序集的完整路径,但没有运气。

所以问题是:我做错了什么,(如果没有错)我怎么能实现我的目标呢?

1 个答案:

答案 0 :(得分:1)

您的数据文件错误。

System.Boolean类型,System命名空间中的许多其他类型都位于mscorlib程序集中,而不是该数据文件声明的System程序集中。命名空间名称和程序集名称之间没有关系。

您可以在该类型的MSDN页面上查看哪个程序集包含类型。

例如System.Uri位于System.dll,但System.Boolean位于mscorlib.dll