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

C# .NET应用程序-如何隐藏依赖库的实现?,c#,.net,architecture,class-library,C#,.net,Architecture,Class Library,这可能是问题的重复,但我不想使用建议的解决方案,即使用Web服务 以下是场景: 1) 我想向客户端公开一个类库。让我们把它命名为“MyClassLibrary” 2) “MyClassLibrary”项目的同一解决方案中还有两个库“Library1”和“Library2” 3) “Library1”指的是“Library2”,而“Library2”指的是“MyClassLibrary” 4) “MyClassLibrary”中没有直接引用“Library1” 我想要什么? “MyClassLib

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

以下是场景:

1) 我想向客户端公开一个类库。让我们把它命名为“MyClassLibrary”

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

3) “Library1”指的是“Library2”,而“Library2”指的是“MyClassLibrary”

4) “MyClassLibrary”中没有直接引用“Library1”

我想要什么?


“MyClassLibrary”的客户端不应能够访问“Library1”中的类、方法。有可能吗?如果我为“MyClassLibrary”创建nuget包,它将包含“Library1”(以及“Library2”)的dll。因此,使用该dll,客户端可以轻松访问“Library1”(以及“Library2”)中的内容。我怎样才能避免呢?我希望我的客户机只能从“MyClassLibrary”访问所需的函数,而不能访问“Library1”(可能还有“Library2”)的实现。如何做到这一点?

不。使事物
内部化
解决了您刚才描述的问题。另外,请注意
[程序集:InternalsVisibleTo(…)]
的存在


当然,正确应用的反射甚至可以让私人事物变得容易。但我不认为这样的情况。使事物
内部化
解决了您刚才描述的问题。另外,请注意
[程序集:InternalsVisibleTo(…)]
的存在


当然,正确应用的反射甚至可以让私人事物变得容易。但是我不认为这样的情况。

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

然而,这只是为了防止他意外地使用它


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

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

然而,这只是为了防止他意外地使用它


如果它包含你不想让他知道的秘密,你不能把它交给他。一种选择是只提供Web服务的接口,并在您所在的位置运行带有您的秘密的实际服务。如果你把程序集交给他,不管保护得多么好,弄得多么模糊,你的秘密都是公开的。

@Hameed,如果“Library1”或“Library2”中的类是私有的,我甚至无法在“MyClassLibrary”中访问它们。所以访问修饰符不起作用了。还有什么东西使用库1和库2吗?@Damien_The_异教徒:是的,可能还有其他一些库也使用库1和库22@Hameed,如果“Library1”或“Library2”中的类是私有的,我甚至不能在“MyClassLibrary”中访问它们。所以访问修饰符不起作用了。还有什么东西使用库1和库2吗?@Damien_The_异教徒:是的,可能还有其他一些库也使用库1和库2。如果“Library1”或“Library2”中的类是内部类,我将无法在“MyClassLibrary”中访问它们。请注意我提到的属性。谢谢@Sereja,我将考虑使用[汇编:MulnalsVisualto(…)]。如果“图书馆1”或“图书馆2”中的类是内部的,我将不能在“MyCaseLabor”中访问它们。请注意我提到的属性。谢谢@ Sereja,我将考虑使用[汇编:InnalsVistiButo(…)]。这些都是你们的好建议。我会尝试一下,并接受你的回答。:-)这是你的一些好建议。我会尝试一下,并接受你的回答。:-)