我需要更新项目中的一些 .NET 程序集。
我检查了反编译的代码,发现新版本的汇编中的一种方法有一个耗时的逻辑。
例如,程序集X.1有一些内部类Y。我需要将程序集更新到版本X.2,但Y类中有一些耗时的更改。
示例:
X.1
internal class Y
{
public void Z(){
Method1();
Method2();
}
}
X.2
internal class Y
{
public void Z(){
Method1();
Method2();
TimeConsumingMethod3();
}
}
我需要在没有“TimeConsumingMethod3()”的情况下运行方法 Z。
是否可以通过反射或其他方式从程序集中仅修改内部类中的一个公共方法?
根据OP,答案是否。
反射使您能够在运行时检查 API,以便获取有关对象、方法、属性等的类型信息。您还可以创建对象并运行方法,包括
private
或 internal
的方法。此外,您可以使用 .NET Reflection 的一部分(通常称为“Reflection Emit”)在运行时“生成”新“代码”。
据我所知,您不能使用反射更改现有代码。
还有其他低级 API 可以让您做到这一点(至少在 .NET Framework 上),但 IIRC 这些要求您用 C++ 编写代码。 由于听起来您已经反编译了代码,因此您也许可以删除“有问题”的代码行并重新编译代码。但是,在执行此操作之前,请考虑图书馆的许可证是否允许这样做。
还要考虑这种耗时的更改是否有充分的理由。
最后,如果这是开源的或者是组织中其他团队拥有的软件包,请考虑与软件包所有者讨论是否有办法禁用这种耗时的行为。