2012-06-08 52 views
1

我從下面的代碼得到一個ReflectionTypeLoadException:使用反射當一個集包含的類型引用另一個組件

var myAssembly = Assembly.LoadFrom(myDLL);  
var types = myAssembly.GetTypes()) 

MYDLL引用另一個文件中的類在其他組件(「myDependency.dll」)
我確定該文件位於應用程序目錄中,並且位於與「myDLL」文件相同的文件夾中。

如何在這種情況下能夠正確加載myDLL?

+0

也許在'AppDomain.CurrentDomain.AssemblyResolve'事件中加載未解析的程序集可以幫助 –

+0

您確定該異常是由對外部dll的引用引起的嗎? –

+0

這可能是由過時的dll引起的。 http://stackoverflow.com/a/7162415/785745 –

回答

0

嗯,我很自豪地宣佈,我已經被寵壞了一些愚蠢的「眼睛的持久性」現象造成的Visual Studio 2010(我猜的)我週五晚上。我只是複製 - 將我的DependencyDLL項目粘貼到一個全新的程序集/項目中,刪除了舊的,將舊的引用更新爲指向新的DependencyDLLNew和Voilà:這就實現了。問題解決了。感謝那些幫助過的人。

+0

當我被提供時,我應該和同事一起出去參加酒吧。 「Naaah只是一個小小的錯誤,我要走了,不會花很長時間」。現在已經過了午夜。 ***嘆*** –

1

我會嘗試打電話:

AssemblyName[] referenced = myAssembly.GetReferencedAssemblies(); 

然後遍歷的AssemblyName對象,並嘗試調用myAssembly.GetTypes()

+0

嗯..聽起來很奇怪:引用的AssemblyName []的調試/監視確實顯示「 myDependency「...我不知道該怎麼想我很困惑。尤其是我重試並從我的DLL中取消了myDependency的引用(實際上是接口實現),然後它正常工作。只是爲了確保這確實是造成問題的問題。 : -/ –

+0

如何才能得到異常「無法加載文件或程序集'myDependency,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依賴項之一。系統找不到指定的文件「。而我可以在.GetReferencedAssemblies()輸出中看到它? –

+0

另外,我可以通過在myAssembly.GetReferencedAssemblies()輸出上進行迭代來加載大概Faulted Dependency DLL,就像你說的那樣。它只是吹在GetTypes()上。 所以很奇怪...... –

1
  1. 確保所有的組件(DLL和EXE文件包括之前加載這些,引用的程序集)是最新的(平臺,配置和版本/構建日期)和您的exe目錄中。

    嘗試在構建之前刪除所有項目的OBJ和BIN目錄以幫助驗證此項目。

  2. 確保您沒有GAC中的其他版本或%PATH%中的目錄。

相關問題