确保只有一个类可以访问引用DLL?

时间:2015-05-06 15:32:53

标签: c# dll visual-studio-2013 intellisense

我有一个项目,我只希望有一个类可以访问dll。我会满足于从intellisense隐藏dll,但如果这是一个选项仍然可以访问它。无论哪种方式,我只希望一个类使用dll,否则不能看到和/或访问它。 我在视觉工作室使用C#。

2 个答案:

答案 0 :(得分:1)

简单地说:你不能这样做(但继续阅读)。

基本上,DLL(从.NET角度来看)是一堆代码和配置文件。仅此而已。因此,鉴于您需要公开这些类以便从该程序集之外的其他类中使用,那么您就不能。

你可以做什么(几年前我最终做到这一点)是使用某种反射来确定哪个类(和名称空间)试图访问你的程序集并且只允许正确的程序。

其他方法是在DLL和允许的程序集之间实现密钥协商。据我所知,你需要手动实现这些。

无论如何,请记住,总是有办法通过反汇编和修改代码来绕过这种保护。所以,至少,不要忘记混淆文件。无论如何,这只会让它变得更加痛苦,但仍然可能。

答案 1 :(得分:0)

另一种方法,如果你的目标是阻止人们意外使用dll的功能是将你的包装类推入中间程序集。然后,您的项目引用该中间项目,而不是有效隐藏它的底层dll。所以你的项目结构会改变成这样的东西:

Main Project -> references API Wrapper Project -> references API DLL

为此,您的包装器项目需要确保它不会通过其公共接口意外地暴露任何API DLL类。

显然,这并不能阻止您的开发人员进入并添加对API DLL的引用,以便他们可以直接使用该库,但如果目标是阻止意外访问API DLL类,因为intellisense帮助开发人员有点过多,然后它可能是一个可行的选择。