繁体   English   中英

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

[英]How to load type from system dll using Activator.CreateInstance?

.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异常。 我尝试将引用的系统程序集“复制本地”属性更改为true,但这似乎没有任何效果。 我也尝试过指定系统程序集的完整路径,但是没有运气。

所以问题是:我在做什么错,以及(如果没有错的话)我如何才能实现目标?

您的数据文件错误。

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

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

例如, System.UriSystem.dll ,而System.Booleanmscorlib.dll

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM