簡體   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