可能重复:
当应该[组件:InternalsVisibleTo()]中使用?
访问DLL方法
我有两个组件,A.DLL和B.DLL。 A.DLL具有一些共同的特点,和B.DLL使用它。 我最终分发A.DLL和B.DLL其他用户。
然而,也有一些A.DLL方法,我标记为公共(由B.DLL使用),但我不希望别人使用它们。
有没有达到这个好办法? 是利用InternalsVisibleToAttribute
一个很好的做法,实现这一目标?
可能重复:
当应该[组件:InternalsVisibleTo()]中使用?
访问DLL方法
我有两个组件,A.DLL和B.DLL。 A.DLL具有一些共同的特点,和B.DLL使用它。 我最终分发A.DLL和B.DLL其他用户。
然而,也有一些A.DLL方法,我标记为公共(由B.DLL使用),但我不希望别人使用它们。
有没有达到这个好办法? 是利用InternalsVisibleToAttribute
一个很好的做法,实现这一目标?
标志着A.DLL项目内部,并添加以下组件属性
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo( "B" )]
虽然被警告,您仍然可以通过反射访问内部的东西,所以它不是100%密封。
InternalsVisibleTo
是要走的路。
你的问题的题目是有点混乱在第一,但看完后,很明显,你想要的是有一些internal
( 未 public
)的成员由特定的程序集访问。
该InternalsVisibleToAttribute
属性是做到这一点的一种方式,但你必须认识到,它暴露了所有内部的其他装配。
还要注意的是,如果你不使用签名的程序集,该InternalsVisibleToAttribute
将允许从该名称的任何组件访问内部。 这可能不是理想的。
另一个选项可以是使用模具注入从组件“A”所要求的代码转换成组件“B”。 这将使“B”来,而无需访问内部独立运作。 这要看你的组件是否使用,这是一个理想的解决方案或没有。
最后,您可以访问代码汇编“A”使用反射。 这是一个有点繁琐,但如果只是一对夫妇的事情,你需要它可能是不够的。 这也将让你提供不错的回退或错误处理时集结号“B”是存在的,但A丢失。
正如其他人所指出的那样,反射可以访问您的装配任何内部或没有。 如果你需要保护你的代码,你应该看看混淆。