我正在使用外部库,我想确保我从不调用库中的某些特定函数。我没有该库的源代码所以我想确保在编译时如果我偶然(或我的一个开发人员)使用该函数,它会抛出错误。有没有办法做到这一点?
答案 0 :(得分:4)
您无法轻松 。您可以将方法标记为过时,但当然需要访问外部库源代码,此时您也可以删除方法。
我能想到的最好的事情是围绕库对象构建一个外观:
public class LibraryFacade
{
//All the library methods as pass-through methods
//Except the bad ones!
}
当然,您的开发人员必须实际使用外观才能提供帮助。如果您根本不信任它们,您可以获得新的开发人员,或将外观放在单独的程序集中,这样客户端代码就无法直接访问外部库。
显然,这类功能需要做很多工作,但它会让你到达目的地。
答案 1 :(得分:1)
如果你有足够的额外时间,你可以克隆外部程序集,并使用相同的方法签名而不是真正的方法签名链接到精简版本,并在运行时/后编译时替换为真正的程序集。对于非签名程序集很容易,我认为如果使用延迟签名功能对其他程序集进行签名,您甚至可以这样做。
好处:完整的intellisence / refactoring支持,完美的构建错误。
缺点:如果库使用大量依赖关系,选择正确的方法子集可能会非常痛苦,获得100%的奇偶校验可能很难。