.NET 应用程序 - 如何隐藏依赖库的实现?

.NET Application - How to hide implementation of dependent libraries?

这可能与 this 问题重复,但我不想采用建议的解决方案,即使用 Web 服务。

场景如下:

1) 我想向客户公开一个 class 库。我们将其命名为 "MyClassLibrary".

2) "MyClassLibrary" 项目的同一解决方案中还有两个库 "Library1" 和 "Library2"。

3) "Libray1" 在 "Library2" 中引用,"Library2" 在 "MyClassLibrary" 中引用。

4) "Libray1"里面没有直接引用"MyClassLibrary".

我想要什么?

"MyClassLibrary" 的客户端应该无法访问 classes,"Library1" 中的方法。有可能吗?如果我为 "MyClassLibrary" 创建 nuget 包,它将包含 "Library1"(以及 "Library2")的 dll。因此,使用该 dll,客户端可以轻松访问 "Library1"(以及 "Library2")中的内容。我怎样才能避免这种情况?我希望我的客户能够仅从 "MyClassLibrary" 访问所需的功能,而不是 "Library1" 的实现(也许 "Library2")。如何实现?

没有。 making things internal 解决了你刚才描述的问题。同样,请注意 [assembly:InternalsVisibleTo(...)].

的存在

当然,正确应用反射甚至可以访问私人内容。但我不考虑这种情况。

如果您想让您的客户不那么方便地访问您的代码,您可以使用访问说明符来阻止他这样做。例如,您可以使用 InternalsVisibleTo 属性来隐藏您的实现,或者将其全部放在一个程序集中并将其中的大部分设为私有。

不过,这只是为了防止他误用而已。

如果其中包含您不想让他知道的秘密,您绝不能将它交给他。一种选择是仅提供 Web 服务的接口,并在您的位置提供包含您的秘密 运行 的实际服务。如果您将程序集交给他,无论保护、混淆或以其他方式隐藏得多么好,您的秘密都会公开。