2012-06-27 30 views
3

我需要做類似:如何從一個參考DLL的GetType時CopyLocal屬性是假的

Type CustomType = Type.GetType("instanceName"); 

它總是返回null。 instanceName是一個字符串,它表示添加到引用(包含copyLocal屬性設置爲false)的dll中包含的類型。

我也試過:

Type CustomType = Type.GetType("instanceName, dllFile.dll"); 

而且還返回null。

非常感謝

亞歷

回答

4

如果組件已經加載,你可以試試這個:

Type customType = Type.GetType("namespace.typename, assembly"); 
+0

謝謝,我覺得很蠢:(是彙編,而不是dllFile.dll。 – pasapepe

3

如果不部署大會GAC和CopyLocal設置設置到false,那麼你打算從哪裏加載程序集?

如果您打算到組件部署到驅動器上的固定位置,可以使用Assembly.LoadFrom

var assembly = Assembly.LoadFrom(@"C:\Path\To\Assembly.dll"); 
var type = assembly.GetType("InstanceName"); 

這使您可以加載一個絕對的裝配。如果您使用的是Type.GetType,則它使用標準融合組件加載規則來嘗試查找匹配的組件(但如果它不是GAC'd或CopyLocal = true),那麼它將不會與您的輸出一起部署,並且GetType將返回null。另外,如果您沒有在類型名稱中指定程序集名稱,例如instanceName, assemblyName,而不是instanceName,I 相信只檢查當前正在執行的程序集。

+0

謝謝,不完全是我正在尋找,但它的一個很好的解決方案:) – pasapepe