C# 如何重定向方法调用?

C# 如何重定向方法调用?,c#,reflection,replace,.net,C#,Reflection,Replace,.net,我有一个在Windows中运行良好的DLL,但是在它的一个私有函数中调用了static System.IO.File.ReadAllBytes。我必须在具有Compact Framework 3.5的windows CE智能设备项目上使用此DLL,并且System.IO.File中没有此类方法。我尝试在项目中创建一个名为File的类,如下所示: public class File { internal static byte[] ReadAllBytes(string path)

我有一个在Windows中运行良好的DLL,但是在它的一个私有函数中调用了static 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)
     {
     }
}
using System.IO.File;

namespace Something
{
    class SomeClass
    {
        public Boolean someMethod()
        {
            byte[] myBytes = File.ReadAllBytes(filePath);
        }
     }
}
我自己对类文件的静态方法的调用在这里被重定向,但是DLL方法内部的调用仍然转到System.Io.File类,我仍然得到MissingMethodException。我尝试了使用公共修饰符的方法,但没有看到任何变化

我甚至试图重写调用私有方法的public方法,在私有方法中调用ReadAllbytes并使用MethodInfo.Invoke,但没有成功

问题:有没有办法强制Dll中的方法接受我的ReadAllbytes方法而不是System.File.IO.ReadAllbytes方法?DLL内的调用如下所示:

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

     internal static void WriteAllBytes(string path, byte[] bytes)
     {
     }
}
using System.IO.File;

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

诸如File.ReadAllBytes之类的静态方法在编译时解析为特定的程序集名称和类。您需要修改DLL以更改调用。您可以对其进行反编译和重新编译,或者编辑IL


*可以使用调试器使用的sameone分析钩子重定向调用,这就是Moles模拟框架的工作方式。但是,它不适合生产使用。

像File.ReadAllBytes这样的静态方法在编译时解析为特定的程序集名称和类。您需要修改DLL以更改调用。您可以对其进行反编译和重新编译,或者编辑IL


*可以使用调试器使用的sameone分析钩子重定向调用,这就是Moles模拟框架的工作方式。但是,它不适合生产使用。

您不能简单地更改DLL的代码并重新编译它吗?您不能简单地更改DLL的代码并重新编译它吗?