簡體   English   中英

如何重定向方法調用?

[英]How to redirect a method call?

我有一個在Windows上可以正常運行的DLL,但是在其私有功能之一中,調用了靜態System.IO.File.ReadAllBytes()。 我必須在帶有Compact Framework 3.5的Windows CE智能設備項目上使用此DLL,並且System.IO.File中沒有此類方法。 我試圖在項目內部創建一個名為“ File”的類,如下所示:

public class File
{
     internal static byte[] ReadAllBytes(string path)
     {
     }

     internal static void WriteAllBytes(string path, byte[] bytes)
     {
     }
}

我自己對File類的靜態方法的調用在此處重定向,但是DLL方法內部的調用仍然轉到System.Io.File類,並且我仍然得到MissingMethodException。 我嘗試使用公共修飾符的方法,但沒有發現任何變化。

我什至嘗試重寫公用方法,該公用方法調用在其中調用ReadAllbytes並使用MethodInfo.Invoke的私有方法,但未成功。

問題:是否有辦法強制Dll中的方法接受我的ReadAllbytes方法而不是System.File.IO.ReadAllBytes()? DLL中的調用如下:

using System.IO.File;

namespace Something
{
    class SomeClass
    {
        public Boolean someMethod()
        {
            byte[] myBytes = File.ReadAllBytes(filePath);
        }
     }
}

諸如File.ReadAllBytes的靜態方法在編譯時解析為特定的Assembly名稱和類。 您將需要修改DLL才能更改調用。 可能您可以對其進行反編譯和重新編譯,或者編輯IL。

*可以使用分析掛鈎(調試器使用的掛鈎)重定向調用,這就是Moles Mocking框架的工作方式。 但是,它不適合生產使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM