.net 在WPF中使用内部FriendAccessAllowedAttribute

.net 在WPF中使用内部FriendAccessAllowedAttribute,.net,wpf,.net,Wpf,在运行Reflector以查找WPF应用程序中错误的根本原因的过程中,我偶然发现了一个内部属性FriendAccessAllowedAttribute,该属性散落在许多不同的类、成员等中。但是,我无法找到该属性的确切用途(如果有的话)。我猜这是C++/CLI基础设施的一部分,但是搜索MSDN、C++/CLI规范和CLI规范并没有发现任何东西。有人知道它的用途吗?我记得,它是控制框架中朋友程序集之间依赖关系的一种方法。基本上,当您授予程序集A对程序集B的“朋友”访问权限时,您不希望将B的所有内部成

在运行Reflector以查找WPF应用程序中错误的根本原因的过程中,我偶然发现了一个内部属性
FriendAccessAllowedAttribute
,该属性散落在许多不同的类、成员等中。但是,我无法找到该属性的确切用途(如果有的话)。我猜这是C++/CLI基础设施的一部分,但是搜索MSDN、C++/CLI规范和CLI规范并没有发现任何东西。有人知道它的用途吗?

我记得,它是控制框架中朋友程序集之间依赖关系的一种方法。基本上,当您授予程序集A对程序集B的“朋友”访问权限时,您不希望将B的所有内部成员都提供给A,因为这样一来,对这样一个成员的任何更改都可能会被破坏(而且,这会增加需要检查的安全表面积)。非常确定这个属性在Silverlight中得到了尊重,但不确定完整的框架。

有趣的是,这个属性本身就是属性

C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll反编译,版本4.0:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum |
                AttributeTargets.Constructor | AttributeTargets.Method |
                AttributeTargets.Property | AttributeTargets.Field |
                AttributeTargets.Event | AttributeTargets.Interface, 
                AllowMultiple = false, Inherited = false)]
[FriendAccessAllowed]
internal sealed class FriendAccessAllowedAttribute : Attribute
{
}
因此,我假定它只能由指定为
mscorlib
之友的选定程序集使用


EDIT显示定义位于
内部可视属性旁边,并包含注释字符串:

如果友元程序集的AllInternalsVisible不为true,则FriendAccessAllowed属性指示与该友元程序集共享的内部构件


是的,我花了一段时间在reflector中挖掘,但没有想到要查看Silverlight。在
System.Threading.Tasks.Task
上也有一些带有此属性的字段/方法。