标签:c delegates code-access-security
尝试创建一个访问数组的委托,我得到一个ArgumentException说该方法无法绑定.
Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.
重现此代码的最小代码量如下:
var method = typeof(string[,]).GetMethod("Get");
var func = Delegate.CreateDelegate(typeof(Func<int, int, string>), new string[4,5], method);
虽然默认情况下Get方法是不可见的,但第一行确实有效并找到了正确的方法.当签名匹配时,我认为该异常与Get方法是安全透明的事实有关,而Func< ;,>可能不是.如何确定委托类型是否安全透明以及如何解决此问题?
解决方法:
我认为你发现了一个CLR错误.有两个根本不同的代码块绑定委托,BindToMethodInfo和BindToMethodName.由于它们内部发生的缓存,它们很难解开,我猜测那里有一些错误,并且与在.NET中特别处理数组这一事实有关.
以前没有注意到这一点在某种程度上是可以解释的,当然每个试图做你所做的事情的人都使用记录在案的Array.GetValue()方法.像这样:
var method = typeof(string[,]).GetMethod("GetValue",
new Type[] { typeof(int), typeof(int) });
var func = Delegate.CreateDelegate(typeof(Func<int, int, object>),
new string[4, 5], method);
哪个工作正常.您可以在connect.microsoft.net上发布反馈,以听取专家的意见,但不要指望快速修复错误.
标签:c,delegates,code-access-security 来源: https://codeday.me/bug/20190715/1467483.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。