Silverlight安全性:授予访问类库匿名类的权限

Silverlight安全性:授予访问类库匿名类的权限,silverlight,security,anonymous-types,internalsvisibleto,Silverlight,Security,Anonymous Types,Internalsvisibleto,我正在将现有类库移植到Silverlight。我经常使用lambda表达式编译,现在因为它我遇到了安全问题 特别是,如果客户端SL应用程序中的匿名类参与lambda表达式,我将无法编译它:我将获得具有以下堆栈跟踪的MethodAccessException: MethodBase.PerformSecurityCheck(Object obj, RuntimeMethodHandle method, IntPtr parent, UInt32 invocationFlags) RuntimeMe

我正在将现有类库移植到Silverlight。我经常使用lambda表达式编译,现在因为它我遇到了安全问题

特别是,如果客户端SL应用程序中的匿名类参与lambda表达式,我将无法编译它:我将获得具有以下堆栈跟踪的
MethodAccessException

MethodBase.PerformSecurityCheck(Object obj, RuntimeMethodHandle method, IntPtr parent, UInt32 invocationFlags)
RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
MethodBase.Invoke(Object obj, Object[] parameters)
Expression.Lambda(Type delegateType, Expression body, IEnumerable<T> parameters)
Expression.Lambda(Type delegateType, Expression body, ParameterExpression[] parameters)
Expression.Lambda(Expression body, ParameterExpression[] parameters)
我们从应用程序中调用StaticReceive方法,如下所示:

class InternalClass { }
void MethodInUserApp()
{
    var x = new InternalClass();
    LibClass.StaticReceive(x);
}
它工作正常,但如果我们使用
DynamicReceive
,它就会失败。看起来CLR认为
过程
方法中的
x
参数属于
内部类
,而不是泛型
T
,并且由于库无法访问
内部类
,因此禁止调用它


它看起来像一个bug,不是吗?

已解决:将以下代码添加到AssemblyInfo.cs:

[assembly: InternalsVisibleTo("System.Core, PublicKey=" +
"00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649" +
"383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb7" +
"7e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638" +
"fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c" +
"123b37ab")]
在Silverlight论坛

[assembly: InternalsVisibleTo("System.Core, PublicKey=" +
"00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649" +
"383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb7" +
"7e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638" +
"fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c" +
"123b37ab")]