2009-10-15 66 views
0

這裏的情況:我使用ILMerge使用this methodcustom.dll)合併組裝&所有它的引用到1個.dll文件。我有一個應用程序在運行時動態加載此程序集(program.exe)。兩個應用程序&程序集都使用一個公共庫(common.dll)。抽象類ClassXcommon.dll中定義,而實現ClassYcustom.dll中定義。當program.exe嘗試從custom.dll加載ClassY時,將拋出異常:C#ILMerge無法轉換類型「優雅」的對象鍵入「ClassX」

無法投射「Cl​​assY」類型的對象以鍵入「ClassX」。

代碼是這樣的,但foo是動態加載的,而不僅僅是一個新的ClassY();

object foo = new ClassY(); 
ClassX bar = (ClassX)foo; 

有沒有人有任何想法爲什麼會這樣做? ClassY絕對實現了ClassX,所有組件/庫版本完全相同。

回答

1

所有的DLLs必須標記爲COM可見。沒有它,編譯器無法解析不同的程序集類型 - 甚至他們被命名相同。

0

您是否檢查過內部異常?這可能是因爲您的ClassY是動態加載的,因此當您執行轉換時,它會嘗試加載其中一個預先合併的程序集。內部的例外情況是「無法組裝」{你是預先合併的程序集名稱}

相關問題