我收到一個ArgumentException「對象類型不能轉換爲目標類型」,但它對我來說沒有任何意義。 廢話爭論異常調用方法
的方法我打電話有以下特徵:
public void Scan(IProgressStatus monitor, string registryPath, string startupDir, string addinsDir, string databaseDir, string scanFolder, string[] filesToIgnore)
我試圖通過monitor
而不是remMonitor
但異常仍然拋出。 除了scanFolder
之外的所有參數都爲null(但是傳遞的字符串.Empty仍會拋出異常),並且filesToIgnore
是零長度數組。
我找不出爲什麼拋出異常。
不知道它是否有幫助,但過程是64位。如果我從32位進程調用相同的方法,則不會引發異常並且運行良好。
[編輯]如果我通過null而不是remMonitor它會進入方法。
[編輯2]調試更深我發現一些奇怪的東西。我試着箱拆箱參數:
rsd.Scan((object)remMonitor, registry.RegistryPath, registry.StartupDirectory, registry.DefaultAddinsFolder, registry.AddinCachePath, scanFolder, filesToIgnore);
和
public void Scan(object monitor, string registryPath, string startupDir, string addinsDir, string databaseDir, string scanFolder, string[] filesToIgnore)
{
monitor = (IProgressStatus)monitor;
結果是:
?(IProgressStatus)monitor
Cannot cast 'monitor' (which has an actual type of 'System.Runtime.Remoting.Proxies.__TransparentProxy') to 'Mono.Addins.IProgressStatus'
它看起來像顯示器實際上有不兼容的類型,現在問題是爲什麼?
[EDIT3]好,我已經成功地明白,這是一個DllHell負載方面的問題,我已經將在Visual Studio中所有的異常轉彎,它說,Mono.Addins是在LoadFrom上下文負載。但是,如果我編寫指令Assembly.Load("Mono.Addins");
,則會引發相同的警告(從LoadFrom上下文加載)。一些提示?
我想問題是在掃描方法。這是你自己寫的一種方法嗎?這可能是由於一些反射錯誤 – Kek
如果我按下「步入」異常在它進入方法體內部之前被拋出,所以我認爲問題在參數類型的某處。我不寫我自己的方法,這是mono.addins源代碼:http://monoaddins.codeplex.com/releases/view/96359 –
你有沒有嘗試過查看異常的StackTrace? – dtb