ArgumentException「オブジェクト型をターゲット型に変換できません」を受け取りましたが、あまり意味がありません。
私が呼び出しているメソッドには、次の署名があります。
public void Scan(IProgressStatus monitor, string registryPath, string startupDir, string addinsDir, string databaseDir, string scanFolder, string[] filesToIgnore)
monitor
代わりに渡そうとしましremMonitor
たが、例外はまだスローされています。scanFolder
null (ただし、string.Empty を渡すと依然として例外がスローされる) でfilesToIgnore
あり、長さがゼロの配列であることを除いて、すべての引数に値があります。
例外がスローされる理由がわかりません。
それが役立つかどうかはわかりませんが、プロセスは64ビットです。32 ビット プロセスから同じメソッドを呼び出すと、例外はスローされず、正常に動作します。
[編集] remMonitor の代わりに null を渡すと、メソッドに入ります。
[EDIT2]さらに深くデバッグしていると、奇妙なことがわかりました。パラメータをボックス化してボックス化解除しようとしました:
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'
そのモニターには実際には互換性のないタイプがあるようですが、問題はなぜですか?
[編集 3]わかりました、それが DllHell ロード コンテキストの問題であることを理解できました。Visual Studio 内のすべての例外を有効にしました。Mono.Addins は LoadFrom コンテキストでロードされていると表示されます。しかし、命令を書くと、Assembly.Load("Mono.Addins");
(LoadFrom コンテキストからロードされた) 同じ警告がスローされます。いくつかのヒント?