[英]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.Uri
在System.dll
,而System.Boolean
在mscorlib.dll
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.