在我的.NET应用程序中,我想限制反射到特定的程序集。我的意思是,我希望一个特定的程序集只能被一些预定义的程序集反射,而不是其他任何程序集。我该怎么做?
ReflectionPermissionAttribute
并不能阻止调用者反射 你的代码;相反,它控制从那些代码到反射API的访问。这对此处没有任何帮助。如果一个人完全信任程序集,那么你无法阻止他们访问其中的任何部分。
反射是不可抗拒的!:-)
我认为除了编写本地代码,您无法阻止反射。即使如此,它也可以被反汇编。如果您需要将某些代码保密,请将其放在您控制的服务器上,并允许远程访问。
我想知道您限制反射的场景是什么。您是否担心暴露在代码库中的某些超级机密数据?或者拥有一些非常聪明的代码块,以至于您可以从中获得优势?
我问这个问题的原因是,我不相信我们在软件开发方面所做的任何事情都是如此独特,以至于需要阻止人们查看它——所以我想知道您是否走了错误的路。由于您没有提到为什么要阻止反射,我不知道您的场景是否(至少从我的角度)有意义限制访问。
我无法想象一个真实的场景,其中限制访问权限会真正帮助您——现在,不是任何特定的代码块使系统变得出色,而是整体包装(用户体验、客户服务、快速演化与使用保持同步等)。如果您的代码足够好,它将随着时间的推移而发生变化,以便任何“破解”它的人都将落后于您当前的迭代(至少如此)。您的价值在于您的头脑,而不是汇编语言。
如果您出于安全原因这样做,那么您真的不应该尝试通过阻止反射来“保护”它。
再次强调,您可能有一个我没有想到的有效原因来阻止反射,但我很怀疑这是否值得努力,而且我倾向于相信您的精力在其他地方会更好地利用……例如,使您想要阻止的代码变得更好。