确保只有一个 class 可以访问引用 dll?

Ensure only one class can access a reference dll?

我有一个项目,我只希望一个 class 可以访问一个 dll。我会满足于从智能感知中隐藏 dll,但如果这是一个选项,我仍然可以访问它。无论哪种方式,我只希望一个 class 使用该 dll,并且它不会被看到 and/or 以其他方式访问。 我在视觉工作室中使用 C#。

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

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

你能做的(几年前我就这么做了)是使用某种反射来确定哪个 class(和命名空间)正在尝试访问你的程序集,并且只允许正确的一.

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

无论如何,请记住,总有一种方法可以通过反汇编和修改您的代码来绕过这种保护。所以,至少,不要忘记混淆文件。不管怎样,这只会让它更痛苦一点,但仍然有可能。

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

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

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

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