在c#中,如何限制谁可以在编译时调用一个方法
本文关键字:调用 方法 一个 何限制 编译 | 更新日期: 2023-09-27 18:14:26
在c#中,是否有可能限制谁可以在编译时调用方法?
我已经研究过指令,但那没有用,因为我不能给符号赋值。
#define WHO VisualStudioUser.Current // does not work
我还研究了代码访问安全(CAS),但这是运行时强制执行,而不是编译时。
要求限制特定开发人员在编译时访问某个方法,如果该方法存在于预编译的程序集中。
这里有更多的细节…我正在为一个开发团队构建一个框架或系列或程序集。由于我们的软件许可限制,我只能允许少数开发人员编写代码来调用一些受限制的方法。开发人员将无法访问框架的源代码,但他们可以访问已编译的框架程序集。
快速的回答将是:不,这是不可能的,如果你需要这样做,你做错了。
这怎么可能呢?这取决于谁在运行代码还是谁写的代码?
Edit有一种方法使用InternalsVisibleTo并限制在源代码控制中对InternalsVisibleTo指定的程序集的访问。参见jord
要求限制特定开发人员在编译时访问某个方法,如果该方法存在于预编译的程序集中。
一种方法是将方法标记为private
或internal
,它不会被任何人在程序集之外调用。UPDATE:还要看一下InternalsVisibleTo
属性,它用于定义哪些程序集可以"看到"程序集的内部。
草稿:
- 将受限制的代码编译成(混淆的)dll: TypeA.dll, TypeB.dll等
- 为每种类型定义一个接口,并将它们编译成单独的dll: ITypeA.dll, ITypeB.dll等 创建一个"保护程序集",并将所有受限制的程序集嵌入其中:guard .dll它有一个ResolveEventHandler,以及实例化在嵌入式受限dll中定义的不同类型的方法。实例通过接口返回。开发人员获得接口dll和Guard.dll。每个开发人员都可以获得一个Guard.dll,其中包含特殊的身份验证令牌。例如,Guard.dll可以绑定到PC, IP地址,发给开发者的GUID,任何东西。
- 开发人员可以实例化那些她有适当认证码的类型,并通过接口使用对象实例。
对不起,这有点模糊,因为这是一年多前我使用这些技术的时候。我希望你讲清楚了主旨。
你可以尝试使用可扩展c#开发的ResolveCorp,一些链接的研究和实现:
http://zef.me/782/extensible-chttp://www.codeproject.com/KB/architecture/DbCwithXCSharp.aspxhttp://weblogs.asp.net/nunitaddin/archive/2003/02/14/2412.aspxhttp://www.devx.com/dotnet/Article/11579/0/page/5