可能重复:
When should [assembly: InternalsVisibleTo()] be used?
Access to dll methods
我有两个组件,A.dll和B.dll。 A.dll有一些共同的功能,而B.dll使用它。我最终必须为其他用户分发A.dll和B.dll。
但是,A.dll中有一些方法我将其标记为公开(供B.dll使用),但我不希望其他人使用它们。
有没有很好的方法来实现这一目标?使用InternalsVisibleToAttribute
是一种很好的做法吗?
答案 0 :(得分:9)
将项目标记为A.dll中的内部并添加以下程序集属性
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo( "B" )]
但请注意,您仍然可以通过反射访问内部资料,因此不会100%密封。
答案 1 :(得分:1)
InternalsVisibleTo
是要走的路。
您的问题的标题起初有点令人困惑,但在阅读后很明显,您想要的是拥有一些internal
(不 public
)成员可由特定组件访问。
答案 2 :(得分:1)
InternalsVisibleToAttribute
属性是实现此目的的一种方法,但您必须意识到它将所有内部结构暴露给另一个程序集。
另请注意,如果您未使用已签名的程序集,则InternalsVisibleToAttribute
将允许使用该名称访问任何程序集的内部组件。这可能并不可取。
另一种选择可能是使用工具将组件“A”中所需的代码注入到组件“B”中。这将允许“B”独立运行而无需访问内部。这取决于你的组件是如何使用的,无论这是否是一个理想的解决方案。
最后,您可以使用反射访问程序集“A”中的代码。它有点繁琐,但如果只需要一些东西,那就足够了。当程序集“B”存在但A缺失时,这也允许您提供良好的后备或错误处理。
正如其他人所指出的那样,反射可以提供对内部装配中任何内容的访问。如果您需要保护您的代码,您应该考虑混淆。