如果在代码中的任何位置使用了特定的外部函数,则在编译时引发错误

本文关键字:函数 编译 错误 外部 任何 代码 位置 如果 | 更新日期: 2023-09-27 18:25:05

我正在使用一个外部库,我想确保我永远不会调用库中的一些特定函数。我没有那个库的源代码,所以我想确保在编译时,如果我不小心(或我的开发人员)使用了那个函数,它会抛出一个错误。有办法做到这一点吗?

如果在代码中的任何位置使用了特定的外部函数,则在编译时引发错误

你不能轻易做到这一点。您可以将该方法标记为过时,但这当然需要访问外部库源代码,此时您也可以删除这些方法。

我能想到的下一个最好的办法是围绕库对象构建一个门面:

public class LibraryFacade
{
    //All the library methods as pass-through methods
    //Except the bad ones!
}

当然,您的开发人员实际上必须使用facade来提供帮助。如果你根本不信任他们,你可以找新的开发人员,或者把facade放在一个单独的程序集中,这样客户端代码就不能直接访问外部库。

显然,这类功能需要做很多工作,但它会让你达到你想要的目标。

如果您有足够的额外时间,您可以克隆外部程序集,并使用相同的方法签名(而不是真正的方法签名)链接到精简版本,并在运行时/编译后用真正的程序集替换。对于未签名的程序集来说很容易,我认为如果使用延迟签名功能对其他程序集进行签名,您甚至可以做到这一点。

优点:完全的智能/重构支持,完美的构建错误。

缺点:若库使用了大量依赖项,那个么选择正确的方法子集可能是一个主要的问题,获得100%的奇偶性可能很困难。