这可能是this问题的重复,但我不想使用建议的解决方案,即使用网络服务。
以下是该方案:
1)我想向客户端公开一个类库。我们将其命名为" MyClassLibrary"。
2)还有两个图书馆"图书馆1"和"图书馆2"在" MyClassLibrary"的相同解决方案中项目
3)" Libray1"在"图书馆2"和"图书馆2"在" MyClassLibrary"中引用。
4)没有直接引用" Libray1"在" MyClassLibrary"。
我想要什么?
" MyClassLibrary"的客户不应该能够访问" Library1"中的类,方法。它有可能吗?如果我为" MyClassLibrary"创建nuget包,它将包含" Library1" (以及"图书馆2")。因此,使用该DLL,客户端可以轻松访问" Library1" (以及" Library2")。我怎么能避免这种情况?我希望我的客户能够只访问" MyClassLibrary"并且没有实施" Library1" (也许"图书馆2")。怎么做到这一点?
答案 0 :(得分:5)
如果您希望客户端访问代码不太方便,可以使用访问说明符来阻止他这样做。例如,您可以使用InternalsVisibleTo
属性来隐藏您的实现,或者将它们全部放在一个程序集中,并使大部分内容都是私有的。
然而,这只是为了防止他意外使用它。
如果它包含您不希望他知道的秘密,则不得将其传递给他。一种选择是仅提供Web服务的接口,并在您的位置运行包含您的秘密的实际服务。如果你给他组装,没有任何保护,混淆或其他模糊,你的秘密是公开的。
答案 1 :(得分:0)
不。让事情internal
解决你刚才描述的问题。同样,请注意[assembly:InternalsVisibleTo(...)]
。
当然,正确应用反射甚至可以访问私人物品。但我不考虑这种情况。