gpt4 book ai didi

c# - 如何重定向方法调用?

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:44 24 4
gpt4 key购买 nike

我有一个在 Windows 中运行良好的 DLL,但在其私有(private)函数之一中调用了静态 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。我尝试了带有公共(public)修饰符的方法,但没有发现任何变化。

我什至尝试重写调用私有(private)方法的公共(public)方法,其中调用了 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 等静态方法在编译时解析为特定的程序集名称和类。您将需要修改 DLL 以更改调用。或许您可以反编译并重新编译它,或者编辑 IL。

*可以使用分析 Hook (调试器使用的 Hook )重定向调用,这就是 Moles Mocking 框架的工作原理。但是它不适合生产使用。

关于c# - 如何重定向方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10860837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com