如何阻止第三方调用某些方法?

Ant*_*ift 7 .net c# encapsulation compact-framework

我有一个正在开发的程序集,用于创建围绕某些潜在敏感功能的外观,我希望允许第三方调用其中包含的某些方法,而不是其他方法.

如果他们可以访问整个DLL,我怎么能阻止第三方调用未经授权的方法(我不关心他们看到代码,只是执行它)?

这必须与.net紧凑框架兼容,所以不幸的是使用StrongNameIdentityPermission属性是不可能的.

Myl*_*ell 3

我认为您应该提供两个 Facade 实现,一个用于公开所有方法的“内部”使用者,另一个仅公开子集的外部实现。您可以通过两个单独的构建过程来实现这一目标,同时仅维护一个代码库。我想到的一种技术是使用编译器指令从外部构建中排除某个方法,或者如果其他公共方法需要该方法,则将其标记为内部方法。如果您确实使用内部修饰符传递敏感方法,您可能还需要实现混淆。

编辑

也许它会更干净,而不是在每个方法周围使用指令来使用分部类,为敏感方法定义一个分部类并将整个类实现放在指令中。

    public partial class MyClass
    {
        public void NonSensitive(){}
    }

    #if INTERNAL_BUILD
    public partial class MyClass
    {
        public void Sensitive(){}
    }
    #endif
Run Code Online (Sandbox Code Playgroud)

您可以将此部分类放在同一个文件或单独的文件中,这可能是一个很好的分离级别,因为您可以在文件名 x_Sensitive.cs 或类似名称的前面加上前缀。